2017-01-23 2 views
1

Каковы различия между этими два головкой самонаведением выбора:Должен ли кто-нибудь ждать фона, запускать и забывать задачу?

HostingEnvironment.QueueBackgroundWorkItem(async() => await UpdateStatsAsync(id)) 

и

HostingEnvironment.QueueBackgroundWorkItem(() => UpdateStatsAsync(id)) 

, когда дело доходит до массового обслуживания некоторой подготовительной работы, что клиенту действительно не нужно зависеть на?

+1

Посмотрите на [этот ВОПРОС] (http://stackoverflow.com/questions/36942716/why-use-async-with-queuebackgroundworkitem) – Icemanind

+0

@Icemanind: Спасибо, эти ответы не ясны, а также противоречат друг другу , И в ответе Стивена Клири говорится об общих случаях асинхронного и синхронного:/ – DeepSpace101

+0

Принятый ответ является подробным и точным. Ответ Клири - нечетный вклад; на самом деле, похоже, не затрагивает практические элементы заданного вопроса. Но это не означает, что этот вопрос не является точным дубликатом вашего. –

ответ

0

В этом случае я хотел бы использовать версию без асинхронной, так как HostingEnvironment.QueueBackgroundWorkItem имеет перегрузку, которая принимает CancellationToken и возвращает Task, так что ваш код будет выглядеть следующим образом:

HostingEnvironment.QueueBackgroundWorkItem(ct => UpdateStatsAsync(id)); 

Внутренне этой перегрузки await с этим для вас. Одна из недостатков этого подхода заключается в том, что вы возвращаете Task из области using или try/catch, вы можете получить сюрпризы, не ожидая своего Task, но в этом простом сценарии вам не нужно беспокоиться об этом.

+0

Эти сюрпризы из-за основной реализации async void в 'HostingEnvironment.QueueBackgroundWorkItem'? – DeepSpace101

+0

Аналогично да, поэтому, если у вас есть 'try' /' catch', например, если вы не '' ожидаете' 'возвращаемый метод' Task' внутри блока 'try', вы вернете' Task', который когда ожидаемый на будет бросить. Вам легко простить за то, что вы поймали эту ошибку, но из-за того, что вы не ждали * внутри * блока 'try', вы не поймаете исключения там. – Stuart

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