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



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

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)

发生这种情况是因为您没有在抛出异常的地方(在同一上下文中(捕获异常。

试试这个

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

最新更新