当从其他线程发起取消请求时,CancellationToken的注册回调在哪个线程执行?
CancellationToken取消回调的执行线程说明
当你在后台线程的任务里通过CancellationToken.Register()注册了取消回调,之后在主线程调用CancellationTokenSource.Cancel()时,这个回调会在发起取消请求的主线程上同步执行,而不是注册它的后台线程。
额外需要注意的点:
- 除非你使用
Register的重载方法(比如指定自定义TaskScheduler或者调整执行上下文参数),否则默认情况下,所有注册的回调都会由调用Cancel()的线程来执行。 - 如果回调包含耗时操作,会直接阻塞发起取消的主线程,所以这类场景里建议在回调内部异步处理或者开启新线程来执行耗时逻辑。
内容的提问来源于stack exchange,提问作者Saturn
相关产品推荐
相关产品推荐

