Переключение на контекст пользовательского интерфейса в продолжении с использованием TaskScheduler.FromCurrentSynchronizationContext () - PullRequest
2 голосов
/ 05 марта 2012

Я пытаюсь поймать ошибку, которую выдает мой метод, используя продолжение.Затем я хочу обновить пользовательский интерфейс моей страницы веб-форм, которая называется задачами.Я использую TaskScheduler.FromCurrentSynchronizationContext (), чтобы переключиться обратно на поток пользовательского интерфейса, но, похоже, он не работает.Каждый раз, когда я перехожу, вызывается MyMethodWhichThrowsAnError (), а затем продолжение задачи, которое не использует поток пользовательского интерфейса.Задача, вызывающая поток пользовательского интерфейса, никогда не выполняется.

Если я изменю основную задачу, вызывающую MyMethodWhichThrowsAnError (), на использование контекста пользовательского интерфейса, тогда будут выполнены оба продолжения.Код кажется правильным в соответствии с блогами, которые я нашел, но он не работает.Что я делаю не так?

Спасибо!

Task task = Task.Factory.StartNew(() =>
{
    MyMethodWhichThrowsAnError();

});

продолжение, которое использует поток пользовательского интерфейса:

task.ContinueWith(lastTask =>
{
    if (task.Status == TaskStatus.Faulted)
    {
        label1.Text = "my friendly message";
    }
}, TaskScheduler.FromCurrentSynchronizationContext());

продолжение, которое не использует поток пользовательского интерфейса:

task.ContinueWith(task2 =>
{
    if (task.Status == TaskStatus.Faulted)
    {
        label1.Text = "my friendly message";
    }
});
...