我正试图从需要调用的异步方法中获取异常,例如:
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
}
});
}