【发布时间】:2016-10-19 18:29:56
【问题描述】:
这是抛出异常的任务。
public Task<SensorReading> ReadSensorsAsync(int cell)
{
return Task.Run(() => {
throw new ArgumentNullException();
...
这是async 方法:
private async void TimerCallback(object state)
{
try
{
var tasksRead = Enumerable.Range(3, 35).Select(i => sensorReader.ReadSensorsAsync(i)).ToList();
await Task.WhenAll(tasksRead);
var r = tasksRead.Select(x => x.Result).ToList();
var taskRecordREsult = RecordReadingAsync(r).Result;
}
catch(Exception e)
{
// expecting to catch everything here
}
}
我所期待的是异常会在await 部分代码中处理。但是,我在 Visual Studio 调试器中遇到了未处理的异常。
问题 - 如何正确地将所有类型的异常从 Task.Run 传递到等待部分?
【问题讨论】:
-
如果你点击“继续”,它那么会被抓住吗?这是我经常看到的......
-
顺便说一句,您可以在示例中包含“await”表达式吗?
-
@JonSkeet:是的,“继续”将我带到等待,但我不希望 VS 告诉我每次
Task.Run发生某些事情时我都有“未处理的异常”。跨度> -
@alexm:我已经更新了代码
-
所以“无法将异常从Task.Run传递给await”的标题有点不准确......它真的是“当任务抛出异常时调试器烦人地中断”
标签: c# exception async-await task-parallel-library task