Обработка исключений внутри Задачи - PullRequest
3 голосов
/ 15 июля 2011

Интересно, является ли обычной практикой писать такой код в приложении wpf, чтобы я мог перехватывать исключения и отображать некоторые сообщения в пользовательском интерфейсе:

Task.Factory.StartNew(() =>{                                              
    try
    {
        if (AuthenticationManager.Instance.Authenticate(username, password))
        {
            ... 
        }
        else
        {
            throw new AuthenticationException("Failed");
        }
    }
    catch (Exception ex)
    {
        Dispatcher.Invoke((Action)(() => txtWarning.Text = ex.Message));
    }
});

Поэтому этот код будет отображать сообщение об ошибкеПользовательский интерфейсЕсли это «ОК», то почему все предлагают использовать t.Wait();, а затем перехватывать все исключения, которые появились в задании?
PS, вопрос может быть глупым, но я не нашел правильного объяснения и не знаком с использованием Задач,

Обновление
Эта статья Джо Албахари помогла мне понять задачи.

1 Ответ

4 голосов
/ 15 июля 2011

TPL прилагает большие усилия для обработки исключений для вас и перемещения их за пределы ваших задач.

Так что, хотя вы можете поймать их в самой Задаче, это должно быть исключением из правила.

В общем, вы действительно хотите обрабатывать исключения вокруг точки ожидания. В случае отображения сообщений в графическом интерфейсе, это немедленно устраняет проблему отправки.

...