如何在取消子任务时仅取消父任务

本文关键字:取消 任务 子任务 | 更新日期: 2023-09-27 18:17:38

我们有一个async控制器动作,参数是取消令牌:

 public async Task<ActionResult> Index(string NomenCode = "", string ProducerName = "", bool? WithAnalog = null, long? OrderId = null, CancellationToken cancelToken = default(CancellationToken))
        {
// .. some code
// my async method gets this token
await SearchModel.GetRemains(search, NomenCode, ProducerName, _WithAnalog,     this.HttpContext, cancelToken);
//.. more code
}

SearchModel.GetRemains方法调用3个其他异步方法(web-services),当其中一个被超时取消时,其他方法不执行。

在这3个web服务中的每一个,我也异步连接到数据库。我怎么能使2我的async任务工作时,第三个的async子方法得到一个错误?

我将取消令牌参数从父方法传递给所有async方法。

如果我不想让子操作影响父操作的执行呢?但是如果parent被取消了,想让它取消吗?我该怎么办?

感谢您的关注和帮助

如何在取消子任务时仅取消父任务

我怎么能使2我的异步任务工作时,第三个异步子方法得到一个错误?

当任务被取消或完成时出现错误(如超时),则await将引发异常。

要避免传播异常,只需使用try/catch:

try
{
  await SearchModel.GetRemains(search, NomenCode, ProducerName, _WithAnalog,     this.HttpContext, cancelToken);
}
catch (MyExpectedException)
{
  ...
}

但是想要它取消如果父取消?

你已经传递了父节点的CancellationToken,所以这已经被处理了。相同的取消令牌在父节点和它的所有子节点之间共享。