Sea*_*poe 4 .net c# try-catch task task-parallel-library
我一直在学习使用TPL,并且我从本文收集的一个例子中遇到了问题.我完全按照Task.Run示例中的方式复制并粘贴代码,但收到一条错误消息,指出未处理异常:
private async void button1_Click(object sender, EventArgs e)
{
try
{
await Task.Run(() =>
{
Thread.Sleep(1000);
throw new InvalidOperationException("Hi!");
});
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
这是错误的图片:
这个代码示例是否过时或者我遗漏了什么?
这只是一个误导性的调试器消息.
实际发生的是异常被抛出,然后由.NET框架(不是用户代码)捕获,然后放在任务上.
因此,虽然从技术上讲,错误消息是正确的(它被.NET框架捕获 - 未被用户代码处理),但在这种情况下它并不是很有用.
不幸的是,调试器也没有很多替代品.在异常离开用户代码时,调试器无法"展望未来"以了解异常将放在特定任务上,并且您的代码将执行await该任务.它必须立即决定是否通知您,而不知道是否将await编辑该任务.
| 归档时间: |
|
| 查看次数: |
1558 次 |
| 最近记录: |