不 await async 异步方法时的异常捕获问题

  • 请问在 .NET Core/C# 中如果调用一个异步方法时不对这个异步方法进行 await ,异步方法在执行过程中如果发生了异常,该异常是否能捕获到?

解决办法

  • 唯一的一招捕获异常方法,在所调用的异步方法中进行 catch ,如果不这样就捕获不到异常

    这个处理太直接了,有点违反原则,异常一般都是往上层调用的方法抛出

  1. public async Task<IActionResult> Index()
  2. {
  3. RequestAsync();
  4. return Ok();
  5. }
  6. private async Task RequestAsync()
  7. {
  8. try
  9. {
  10. var client = _httpClientFactory.CreateClient();
  11. client.Timeout = TimeSpan.FromMilliseconds(1);
  12. var response = await client.GetAsync("https://www.cnblogs.com/");
  13. }
  14. catch (Exception ex)
  15. {
  16. _logger.LogError(ex, "RequestAsync");
  17. }
  18. }
  • 不合适
  1. public static async Task Main(string[] args)
  2. {
  3. Task taskResult = null;
  4. try
  5. {
  6. var t1 = ThrowExcrptionAsync(2000, "first");
  7. var t2 = ThrowExcrptionAsync(1000, "second");
  8. await (taskResult = Task.WhenAll(t1, t2));
  9. }
  10. catch (Exception e)
  11. {
  12. Console.WriteLine(e.Message);
  13. foreach (var item in taskResult.Exception.InnerExceptions)
  14. {
  15. Console.WriteLine(item.Message);
  16. }
  17. }
  18. Console.ReadKey();
  19. }