-1

我有一个带有取消令牌作为参数的异步控制器操作:

 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 服务),当其中一个被超时取消时,其他的没有执行。

在这 3 个 Web 服务中的每一个中,我也异步连接到数据库。async当第三async个子方法出错时,如何使我的两个任务工作?

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

如果我根本不希望子操作影响我的父操作的执行?但是如果父母被取消,希望它取消吗?我应该怎么办?

感谢您的关注和帮助

4

1 回答 1

1

当第三个异步子方法出错时,如何使我的两个异步任务工作?

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

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

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

但是如果父母被取消,希望它取消吗?

你已经把父母的CancellationToken下来了,所以这已经处理好了。相同的取消令牌在父级及其所有子级之间共享。

于 2015-10-14T17:51:47.933 回答