繁体   English   中英

如何避免使用 TaskContinuationOptions 继续任务

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM