C# 传递给CancellationToken.Register的回调是否会导致同步等待?

C# 传递给CancellationToken.Register的回调是否会导致同步等待?,c#,asynchronous,C#,Asynchronous,如果我将回调附加到CancellationToken.Register,那么在CancellationToken被取消时,该回调的执行是否同步处理(并因此阻塞)?还是异步处理?取消回调始终在调用CancellationTokenSource.Cancel的线程中同步执行。如果无法阻止,则需要在单独的线程中调用Cancel 如果您对此感到不安,我提出了一个问题来提供异步取消: 到目前为止,它还没有得到太多的关注。您会选择使用Task.Run调用Cancel(),还是在提供的回调中(Register

如果我将回调附加到
CancellationToken.Register
,那么在
CancellationToken
被取消时,该回调的执行是否同步处理(并因此阻塞)?还是异步处理?

取消回调始终在调用
CancellationTokenSource.Cancel的线程中同步执行。如果无法阻止,则需要在单独的线程中调用
Cancel

如果您对此感到不安,我提出了一个问题来提供异步取消:


到目前为止,它还没有得到太多的关注。

您会选择使用
Task.Run
调用
Cancel()
,还是在提供的回调中(
Register(()=>Task.Run(MyCallback())
)?@James我认为应该在
任务中调用
Cancel
。运行
。如果您试图在回调级别解决它,您可能会丢失一个(因为您不一定控制要使用令牌的代码)