[英]How to avoid continuation of Tasks with TaskContinuationOptions
我了解TaskContinuationOptions
允许或拒绝继续执行链式任务的过程,我下面的示例我不确定如何产生错误,因此不继续执行最后一个任务,您能否建议?
Task<string> T1= Task.Run(() =>
{
Thread.Sleep(delay);
return "Step 1.";
});
Task<string> T2= T1.ContinueWith(x =>
{
Thread.Sleep(delay);
return "Step 2.";
});
Task<string> T3= T2.ContinueWith(x =>
{
Thread.Sleep(delay);
throw new NotImplementedException();
return "Step 3";
}, TaskContinuationOptions.OnlyOnRanToCompletion);
Task<string> T4= T3.ContinueWith(x =>
{
Thread.Sleep(delay);
return "Step 4.";
});
您的测试不正确:您在创建任务T3
时使用TaskContinuationOptions.OnlyOnRanToCompletion
,但由于 T2 始终运行到完成,因此 T3 被执行,T4 也是如此。 创建 T4 时需要使用TaskContinuationOptions.OnlyOnRanToCompletion
。
TaskContinuationOptions.OnlyOnRanToCompletion
意味着您通过调用ContinueWith
创建的任务只有在上升任务(即前一个任务)运行完成时才会运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.