我正在尝试使用延续来捕获我的方法抛出的错误。然后我想更新我的Web表单页面的ui,它调用了任务。我正在使用TaskScheduler.FromCurrentSynchronizationContext()切换回UI线程,但它似乎不起作用。每次我单步执行时,调用MyMethodWhichThrowsAnError(),然后调用不使用UI线程的任务延续。调用UI线程的任务永远不会被命中。
如果我更改调用MyMethodWhichThrowsAnError()的主任务以使用UI上下文,则两个连续都被命中。根据我发现的博客,代码似乎是正确的,但它不起作用。我做错了什么?
谢谢!
Task task = Task.Factory.StartNew(() =>
{
MyMethodWhichThrowsAnError();
});
使用UI线程的延续:
task.ContinueWith(lastTask =>
{
if (task.Status == TaskStatus.Faulted)
{
label1.Text = "my friendly message";
}
}, TaskScheduler.FromCurrentSynchronizationContext());
不使用UI线程的延续:
task.ContinueWith(task2 =>
{
if (task.Status == TaskStatus.Faulted)
{
label1.Text = "my friendly message";
}
});