【发布时间】:2017-01-27 12:29:33
【问题描述】:
我正在测试一个在 Linqpad 上创建的简单控制台应用程序,其想法是确保了解 Task 的工作原理并创建一个在 Task完成、故障或取消时有效的逻辑 >。我只想在任务完成但没有出错或取消时执行逻辑。
void Main()
{
CancellationTokenSource cts = new CancellationTokenSource(new TimeSpan(0,0,0,0,1000));
Task t = Task.Run(() => Work(),cts.Token);
try
{
t.Wait();
}
catch
{
}
("Completed :: " + t.IsCompleted).Dump();
("Canceled :: " + t.IsCanceled).Dump();
("Faulted :: " + t.IsFaulted).Dump();
}
public async Task Work()
{
await Task.Delay(3000);
}
以下是问题:
-
我能够自信地找出 Completed 和 Faulted 状态,但即使在我看来这段代码会导致 Task 取消,
李> 1234563 >继续出错选项,但我假设,如果我能继续出错,它会变成假IsCanceled属性的值始终为 false。
【问题讨论】:
-
取消是合作的。您的任务忽略了您的取消令牌,而是选择运行完成。因此,它没有被取消。
-
我应该做哪些修改才能使其正常工作,我的其他理解是否正确,如果异常传播,那么它应该是故障未完成?
标签: c# async-await task-parallel-library task