【发布时间】:2016-05-20 01:13:23
【问题描述】:
我读过一个长时间运行的任务被认为是阻塞线程的任务,因此需要用LongRunning 选项标记它,以便任务调度程序更愿意为该任务分配一个新线程。
具有异步 IO 的任务也被视为长时间运行?
例子:
//This method can run for hours
async Task ListenerLoop(CancellationToken Cancel, NetworkStream stream)
{
while(!Cancel.IsCancellationRequested)
{
var CancelTimeoutOrReadSource = new CancellationTokenSource();
var TimeoutTask = Task.Delay(TimeSpan.FromSeconds(ReadTimeout), CancelTimeoutOrReadSource.Token);
var ReadTask = stream.ReadAsync(b, 0, b.Length, CancelTimeoutOrReadSource.Token);
if (await Task.WhenAny(TimeoutTask, ReadTask) == TimeoutTask)
{
CancelTimeoutOrReadSource.Cancel();
return;
}
else
{
CancelTimeoutOrReadSource.Cancel();
//readed bytes count
c = ReadTask.Result;
}
//read 'c' bytes from array 'b'
//Give time to other tasks to run (Is this correct?)
await Task.Delay(5000);
}
}
【问题讨论】:
标签: c# asynchronous task-parallel-library