我正在尝试迁移到使用 .NET 中的 CancellationToken/Src 构造,例如:https: //learn.microsoft.com/en-us/dotnet/standard/threading/cancellation-in-management-threads
我的基本问题是关于对取消请求做出反应。
就我而言,我有一些长时间运行的处理,这对于一致性并不重要。当取消请求到达时,我无法承受“轮询”的模式,例如:
while (!_token.IsCancellationRequested)
{
DoProcessing(...)
}
因为处理过程可能需要几分钟,而我真的想立即退出。
我的问题是,正确的方法是否是简单地使用此设置:
public void Start()
{
_token.Register(() => _token.ThrowIfCancellationRequested());
// Continuously process stuff.
while (!_token.IsCancellationRequested)
{
DoProcessing(...)
}
}
也就是说,注册一个回调,该回调只会抛出 OperationCanceledException。
我可以在这里阅读:https://learn.microsoft.com/en-us/dotnet/api/system.threading.cancellationtokensource.cancel?view=netframework-4.8,即:
我们建议使用 CancellationToken 注册的可取消操作和回调不要抛出异常。
然而...
立即中断我的处理(而不是轮询)并仍然遵守框架规定的“规则”的正确方法是什么?
慕容3067478
相关分类