不 await async 异步方法时的异常捕获问题
- 请问在 .NET Core/C# 中如果调用一个异步方法时不对这个异步方法进行 await ,异步方法在执行过程中如果发生了异常,该异常是否能捕获到?
解决办法
- 唯一的一招捕获异常方法,在所调用的异步方法中进行 catch ,如果不这样就捕获不到异常
这个处理太直接了,有点违反原则,异常一般都是往上层调用的方法抛出
public async Task<IActionResult> Index()
{
RequestAsync();
return Ok();
}
private async Task RequestAsync()
{
try
{
var client = _httpClientFactory.CreateClient();
client.Timeout = TimeSpan.FromMilliseconds(1);
var response = await client.GetAsync("https://www.cnblogs.com/");
}
catch (Exception ex)
{
_logger.LogError(ex, "RequestAsync");
}
}
- 不合适
public static async Task Main(string[] args)
{
Task taskResult = null;
try
{
var t1 = ThrowExcrptionAsync(2000, "first");
var t2 = ThrowExcrptionAsync(1000, "second");
await (taskResult = Task.WhenAll(t1, t2));
}
catch (Exception e)
{
Console.WriteLine(e.Message);
foreach (var item in taskResult.Exception.InnerExceptions)
{
Console.WriteLine(item.Message);
}
}
Console.ReadKey();
}