【发布时间】:2020-06-02 20:41:00
【问题描述】:
我一直在阅读,例如这里 (Catch an exception thrown by an async void method),我认为 async Task 方法的行为是:
- 您可以在使用
await或Task.Wait时照常尝试/捕获它们,例如try{ await X();}catch(Exception SqlException e){...} - 如果你让它“冒泡”,你会得到
AggregateException
但我发现我的应用程序只是终止而没有中断异常。我的代码如下:
internal async Task RunAsync()
{
var tasks = monitors.Select((p) => p.Value.MonitorAsync()).ToList();
await Task.WhenAny(tasks);
Console.WriteLine("ONE");
}
public static async Task Main(string[] args)
{
var app = new App();
try
{
await app.RunAsync();
Console.WriteLine("TWO");
}
catch(Exception e)
{
Console.WriteLine(e);
}
}
在“ONE”和“TWO”上设置断点我可以看到tasks 至少有一个Task 的状态为Faulted,t 的状态为RanToCompletion。所以故障状态丢失,没有异常。
显然我遗漏了一些明显的东西,我应该做些什么不同的事情?
顺便说一句WhenAny 用于检测异常终止,这些任务应该只因失败而退出。这更像是一个了解捕获异常的测试平台。
【问题讨论】:
标签: c# .net task-parallel-library