Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET关闭任务,条件为CancellationToken_.net_Asp.net Core_Asynchronous_Task Parallel Library_Cancellationtokensource - Fatal编程技术网

.NET关闭任务,条件为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 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);