使用TaskScheduler.FromCurrentSynchronizationContext()在延续中切换到UI上下文

时间:2012-03-05 17:18:03

标签: .net c#-4.0 parallel-processing task continuations

我正在尝试使用延续来捕获我的方法抛出的错误。然后我想更新我的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";
    }
});

0 个答案:

没有答案