【发布时间】:2016-12-07 09:39:15
【问题描述】:
在button_click 事件中,我启动Task 以异步执行一些耗时的计算。我使用Task.ContinueWith 并将TaskSheduler 设置为延续到UI 同步上下文,以在Textbox 中显示异步计算的结果。
现在让我们说最后一部分抛出一个异常,如下所示:
private void button1_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(DoSomeCalculations).ContinueWith
(t => { throw new Exception("Some Exception"); }, TaskScheduler.FromCurrentSynchronizationContext());
}
如果我启用调试选项“仅启用我的代码”,则程序会停止并收到警告:“用户代码未处理异常”
但是如果我不设置这个选项,异常就会消失在任何地方(没有程序崩溃,什么都没有)。
那么我如何/在哪里可以处理这个异常?
编辑:请注意,正如标签所示,我使用的是 .NET-4.0
【问题讨论】:
-
鉴于
DoSomethingAsync在其名称中声称是Async,它应该已经返回一个Task,所以使用StartNew实际上是错误的。您正在创建一个创建任务的任务,而不是直接调用DoSomethingAsync并让它创建Task。 -
@Servy 我不知道那个命名约定。我将函数调用更改为
DoSomeCalculations,以表明该函数本身不是async。
标签: c# exception-handling .net-4.0 task-parallel-library continuewith