2014-11-04 2 views
1

При создании новой задачи с использованием Task.Run() необходимо указать метод как async и использовать await для возобновления потока программы?Запрашивает ли Task.Run() async/wait?

Или можно просто позвонить Task.Run() и забыть про новую тему? Я., Task.Run() просто возвращается, и новый поток запускается независимо.

+2

Исследование: Вы сделали? Этот [хороший праймер] (http://msdn.microsoft.com/en-AU/library/hh191443.aspx) может быть полезен для изучения 'async' и' await', если нет. – MickyD

+0

Спасибо, мне действительно нужно изучить механизм async/await. Но на данный момент мне просто нужна обработка, связанная с процессором, для запуска в отдельном потоке. 'Task.Run()' похоже на путь. – sapito

ответ

4

Или можно просто вызвать Task.Run() и забыть про новую тему?

Да, это возможно. Нет требования обрабатывать полученные Task или Task<T> в C#. Это означает, что вам не нужно использовать async или await.

Это, как говорится, задачи «огонь и забыть», как правило, являются признаком плохого дизайна. Как минимум, обычно рекомендуется обернуть Task тем, что будет await для обработки и регистрации исключений.

+0

Согласовано. Вместо 'async' -'await' можно использовать метод' ContinueWith' для обработки результата задачи после его завершения (или неудачного). – vesan

+0

Этот поток выполняет некоторую обработку, связанную с процессором, и использует обратный вызов для уведомления о статусных обновлениях. Поэтому я забываю об этом до завершения обработки. – sapito

+0

@sapito Используйте ContinueWith для выполнения вашей «окончательной» обработки, но async/wait делает это проще. –

Смежные вопросы