取消所有Task.Run执行特定方法

时间:2019-07-02 00:54:01

标签: c# task-parallel-library

如果我连续启动几个可能阻塞的Task.Run(method),是否有办法发现(或缓存以供以后取消)等待lock{}或{{ 1}}在Waitone()内?

例如,如果我说:

method

我以后如何Task.Run(() => { TradingSystem.QuoteUpdate(quote); //QuoteUpdate may block for several reasons }); cancel那些正好执行tasks method而还没有完成的任务?

1 个答案:

答案 0 :(得分:4)

没有办法列出“所有任务”,更不用说“所有执行特定方法的任务”了。因此,如果以后需要遍历它们,则需要在创建时存储它们。

取消联系实际上不需要您知道任务,因为您可以将相同的取消令牌传递给所有此类任务-请参阅How to cancel a Task in await?

但是...这对您没有帮助,因为任务取消是合作活动,并且在re.I上阻塞的任务或任何其他等待将无法取消自己。请参阅How do I cancel a Blocked Task in C# using a Cancellation Token?和有关黑客尝试解决此限制的类似文章。基本上,除了使您的代码在所有调用中都真正异步且可取消之外,您无能为力。