【发布时间】:2016-05-04 14:44:29
【问题描述】:
我有一个任务,它运行一个循环并在每次迭代时延迟一段时间。一旦CancellationTokenSource 调用Cancel() 我希望我的主代码到Wait() 以完成Task.Delay(interval) 并且在我的代码继续之前退出循环的任务。我认为这段代码可以工作,但事实并非如此。
相反,我的主代码在循环退出之前传递了t.Wait()。为什么?
主要方法代码:
var cts = new CancellationTokenSource();
CancellationToken ct = cts.Token;
var t = Task.Run(() => { MyLoopTask(200, ct); });
// Prepare information
cts.Cancel();
t.Wait();
// Send Information
任务代码
private async Task MyLoopTask(int interval, CancellationToken cancelToken)
{
while (!cancelToken.IsCancellationRequested)
{
Debug.Print(" Still In Loop ");
// Do something
await Task.Delay(interval);
}
Debug.Print(" cancelled ");
//Clean up
}
【问题讨论】:
-
cts和ct的邮政编码 -
我想查看更多 Main Method 代码,以了解发生了什么。
-
它很大,我会试着把它解析成有意义的块。
-
t执行MyLoopTask,它本身返回一个 newTask。您的所有代码都忽略了它。t几乎立即完成,因为 那Task几乎没有什么工作要做。
标签: c# task-parallel-library task