Task를 사용한 Polling 구현
int delay = 1;
var cancellationTokenSource = new CancellationTokenSource();
var token = cancellationTokenSource.Token;
var listener = Task.Factory.StartNew(() =>
{
while(true)
{
//poll HW
Thread.Sleep(delay);
if(token.IsCancellationRequested)
break;
}
//cleanup
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default);