gpt4 book ai didi

c# - 防止任务继续

转载 作者:太空宇宙 更新时间:2023-11-03 11:21:11 24 4
gpt4 key购买 nike

我正在使用 Task continuations 在 WinForm 项目上进行长时间运行的操作。

var task1 = Task.Factory.StartNew(() => DoSomeWork());

var task2 = task1.ContinueWith(result => DoSomeMoreWork(), TaskContinuationOptions.OnlyOnRanToCompletion);

var task3 = task2.ContinueWith(result => DoFinalWork(), TaskContinuationOptions.OnlyOnRanToCompletion);

如果在任务 2 上执行的 DoSomeMoreWork() 函数满足某些条件,我只想继续任务 3。如何做到这一点?

最佳答案

来自 MSDN

a user-defined value can be passed from the antecedent to its continuation in the Result property, so that the output of the antecedent can serve as input for the continuation

所以一种方法是在任务 3 中,在执行任何工作之前检查任务 2 的结果。

var task2 = task1.ContinueWith(result => DoSomeMoreWOrk(), TaskContinuationOptions.OnlyOnRanToCompletion);
var task3 = task2.ContinueWith(x => DoFinalWork(x.Result));

从 task2 返回的结果决定了 task3 中发生的事情。

编辑如果在操作中不满足某些条件,另一种解决方案是取消 task2。那么后续任务连计划都没有。

来自MSDN

To prevent a continuation from executing if its antecedent is canceled, specify the NotOnCanceled option when you create the continuation.

所以task3的定义就变成了

var task3 = task2.ContinueWith(result => DoFinalWork(), TaskContinuationOptions.NotOnCancelled);

关于c# - 防止任务继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10946334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com