.NET关闭任务,条件为CancellationToken
如何正确地使用CancellationToken创建任务,并根据条件关闭任务 例如:.NET关闭任务,条件为CancellationToken,.net,asp.net-core,asynchronous,task-parallel-library,cancellationtokensource,.net,Asp.net Core,Asynchronous,Task Parallel Library,Cancellationtokensource,如何正确地使用CancellationToken创建任务,并根据条件关闭任务 例如: CancellationToken CancellationToken = new CancellationTokenSource(); Task.Run(() => { try{ // Get some data from APIs... GetDataFromApi(); } catch(Exception ex) { // So here I want to
CancellationToken CancellationToken = new CancellationTokenSource();
Task.Run(() => {
try{
// Get some data from APIs...
GetDataFromApi();
}
catch(Exception ex)
{
// So here I want to cancel this task and I do not want any continuation Tasks to run
}
}, CancellationToken.Token);
我是否需要检查CancellationToken是否已取消,或者如何正确执行此操作
谢谢从技术上讲,将任务设置为
已取消
状态的方法是抛出OperationCanceledException
并传递与任务关联的取消令牌(通常通过调用CancellationToken.throwifcCancellationRequested()
方法完成)。但这要求令牌的IsCancellationRequested
为true
。因此,实现您想要的效果的一种方法是先取消,然后通过wifcancellationrequested()调用:
我建议抛出一个发生在try
块内部的异常,而不是抛出OperationCanceledException
,这样可以简化调试过程,并且更加清晰
var cts = new CancellationTokenSource();
Task.Run(() => {
try
{
// Get some data from APIs...
GetDataFromApi();
}
catch (Exception ex)
{
cts.Cancel();
cts.Token.ThrowIfCancellationRequested();
}
}, cts.Token);