[英]Cancellation Token source example
我正在做一些异步操作,我想使用CancellationToken来阻止异步任务运行,如果用户例如请求它。 为了做到这一点,最好有一个Dictionary,我可以找到正确的Thread来停止正确的操作? 我目前正在关注的是:
public Dictionary<Thread, CancellationToken> CancellationTokenData;
因此,如果用户请求取消操作,如果我没错,它应该表现正常吗?
这样做的最佳做法是什么?
例如,假设用户使用线程{B}在数据库内的集合{A}上执行一些非常长的操作。 然后他取消操作并继续使用来自另一个线程的集合{A}的另一个冗长的操作。 我应该为当前的CancellationToken
使用全局变量吗?
通常,每个可取消的操作都有一个CancellationTokenSource
。 您将CancellationTokenSource传递给可能需要取消操作的所有人( cts.Cancel()
),并将CancellationToken
( cts.Token
)传递给需要知道取消的每个人。
在这个抽象级别,你不会停止线程; 你停止了操作。 线程仅仅是实现细节。
因此,我不认为将令牌映射到线程是个好主意。 如果涉及任务,这是一个非常糟糕的主意,因为无法保证每个任务实际上都在新线程上运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.