是否可以在没有轮询的情况下取消具有取消令牌的任务? 问题是任务包装的功能对于处理器和RAM而言资源过于密集,所以我需要停止它而不是等待任务完成。
当前代码:
Task.Run(() =>
{
while(true)
{
token.ThrowIfCancellationRequested();
RenderDoc();
}
}, token);
是否有可能避免while
循环轮询令牌状态并取消当前任务及其所有孩子而不是每次都请求令牌状态?
像:
var cts = new CancellationTokenSource();
var token = cts.Token;
token.Register(() => NotifyCancel());
void Foo()
{
Task.Run(() =>
{
RenderDoc();
}, token);
}
void Cancel()
{
//handle event here
//stop task
cts.Cancel();
}
问题是当我为一个令牌注册一个回调时
并且调用cts.Cancel();
任务继续执行。