代码之家  ›  专栏  ›  技术社区  ›  Silly Dude

如何在异步方法中捕获异常?

  •  2
  • Silly Dude  · 技术社区  · 3 年前

    我正在学习异步并等待。以下“catch”未捕获DoTask中引发的异常。假设DoTask是我无法更改的第三方方法,如何修复它,使catch子句捕获异常?

    private static async Task DoTask()
    {
        await Task.Delay(10000);
        throw new Exception("Exception!");
    }
    
    
    public static void Main(string[] args)
    {
        try
        {
            Task.Run(async () => await DoTask());
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    
        Console.WriteLine("End");
        Console.ReadKey();
    }
    
    3 回复  |  直到 3 年前
        1
  •  3
  •   Enigmativity    3 年前

    这个简化怎么样:

    public static async Task Main(string[] args)
    {
        try
        {
            await DoTask();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    
        Console.WriteLine("End");
        Console.ReadKey();
    }
    
        2
  •  1
  •   Yom B    3 年前

    AggregateException 如果您使用 async/await try

        3
  •  1
  •   Silly Dude    3 年前

    private static async Task DoTask()
    {
        await Task.Delay(10000);
        throw new Exception("Exception!");
    }
    
    
    public static void Main(string[] args)
    {
        try
        {
            Task task = DoTask();
            Task.WaitAll(task);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.InnerException.Message);
        }
    
        Console.WriteLine("End");
        Console.ReadKey();
    }