捕获异步方法的异常

时间:2021-04-10 15:28:54

标签: c#

您好,我想捕获异步方法的异常,但看起来这个例子不起作用:

        public void TryToCatchException()
        {
            try
            {
                _ =LongRunningMethod();
            }
            catch (MyException)
            {
                Console.WriteLine("catched");
            }
        }


        public static async Task LongRunningMethod()
        {
            await Task.Run(() =>
            {
                try
                {
                    Task.Delay(1000); //simulation of work
                    throw new ArgumentException(); // this is a example
                }
                catch (ArgumentException)
                {
                    throw new MyException;
                }

            });
        }

如果我启动调试器会说没有捕获到异常“MyException”...有人可以帮助我吗?

1 个答案:

答案 0 :(得分:3)

当您放弃任务时,不会观察到这些异常:

_ =LongRunningMethod();

如果您想从 LongRunningMethod 中捕获异常,那么您需要 await 从该方法返回的任务:

await LongRunningMethod();