捕获调用异步方法C#的异常

时间:2020-10-26 22:28:13

标签: c# .net asynchronous exception

我正在尝试从需要调用的异步方法中获取异常,例如:

public async Task MyFirstMethod()
{
     await Check(() => Test("test"));
}

        private async Task<TResult> Check<TResult>(Func<TResult> function)
        {
            try
            {
                await Task.Run(() => function());
                ...
            }
            catch(Exception exception)
            {
                <<<Reach here>>>
            }
        }

private async Task<string> Test(string s)
{
    await Task.Run(() => s.ToList());
    throw new Exception("Exception Test");
}

如果Test方法不是异步的,而我只是在Check方法中调用function(),则此方法有效。 我在做什么错了?

谢谢。

解决方案: private async Task<TResult> Check<TResult>(Func<TResult> function)private async Task<TResult> Check<TResult>(Func<Task<TResult>> function)

1 个答案:

答案 0 :(得分:-3)

之所以会发生这种情况,是因为您没有在相同的上下文中捕获引发异常的地方。

尝试一下

private async Task<TResult> Check<TResult>(Func<TResult> function)
{
        await Task.Run(() => {
           try 
           {
              function();
           }
           catch(Exception exception)
           {
              // do whatever
           }
        });
}