繁体   English   中英

取消令牌源示例

[英]Cancellation Token source example

我正在做一些异步操作,我想使用CancellationToken来阻止异步任务运行,如果用户例如请求它。 为了做到这一点,最好有一个Dictionary,我可以找到正确的Thread来停止正确的操作? 我目前正在关注的是:

    public Dictionary<Thread, CancellationToken> CancellationTokenData;

因此,如果用户请求取消操作,如果我没错,它应该表现正常吗?

这样做的最佳做法是什么?

例如,假设用户使用线程{B}在数据库内的集合{A}上执行一些非常长的操作。 然后他取消操作并继续使用来自另一个线程的集合{A}的另一个冗长的操作。 我应该为当前的CancellationToken使用全局变量吗?

通常,每个可取消的操作都有一个CancellationTokenSource 您将CancellationTokenSource传递给可能需要取消操作的所有人( cts.Cancel() ),并将CancellationTokencts.Token )传递给需要知道取消的每个人。

在这个抽象级别,你不会停止线程; 你停止了操作。 线程仅仅是实现细节。

因此,我不认为将令牌映射到线程是个好主意。 如果涉及任务,这是一个非常糟糕的主意,因为无法保证每个任务实际上都在新线程上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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