取消令牌源示例

Chr*_*sto 5 c# asynchronous

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

    public Dictionary<Thread, CancellationToken> CancellationTokenData;
Run Code Online (Sandbox Code Playgroud)

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

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

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

Seb*_*zus 16

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

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

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