Ответ 1
Каждый вариант имеет свою специфику, отметьте этот и этот. Если вы их понимаете, вы можете решить, какой из них лучше для вас.
Таким образом, решение, которое возвращает задачу непосредственно, не захватывает SynchronizationContext?
Это не задача, которая захватывает текущий контекст синхронизации. Он TaskAwaiter.OnCompleted
(или ConfiguredTaskAwaitable.OnCompleted
, в случае ConfigureAwait
), который косвенно вызывается кодом, сгенерированным компилятором С#, как часть инструкции await
для задачи.
Итак, если вы не используете await
, вы не должны беспокоиться о захвате SynchronizationContext
, это не волшебство происходит само по себе. Это, вероятно, делает третий вариант наиболее благоприятным, но помните о его режиме распространения исключений.