如何捕获async回调方法中的异常?

2019-04-29 16:42发布

问题:

代码如下:

    class Program
    {


        static void Test(Func<int, Task> callback)
        {
            try
            {
                callback.Invoke(1);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);//进不到这里,所以不会打印出异常信息
            }

        }


        static void Main(string[] args)
        {

            Test(async n =>
            {
                throw new Exception("abc");//这里抛出的异常将捕获不到
                await Task.CompletedTask;
            });


            Console.WriteLine("OK");
            Console.ReadLine();


        }

    }

请问在这样的场景中,如何捕获回调方法中出现的异常呢?谢谢大神.

回答1:

少了 Wait()

static void Test(Func<int, Task> callback)
{
    try
    {
        callback.Invoke(1).Wait();
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message); //可以打印出异常信息
    }
}