2015-03-19 5 views
1

Предполагая, что мне не нужен контекст синхронизации, требуется .ConfigureAwait(false), если нужно, когда я уже в потоке ThreadPool? Например, я начал свою работу асинхронной через:ConfigureAwait (false), необходимый для потоков threadpool?

await Task.Run(() => myService.DoSomething());

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

ответ

2

Если существует текущий контекст синхронизации (даже если поток, выполняющий код, является потоком пула потоков), он будет использоваться. Если вы не хотите, чтобы этот контекст синхронизации использовался, вам необходимо использовать ConfigureAwait(false). Если нет текущего контекста синхронизации, то ConfigureAwait(false) ничего не делает, так как нет контекста синхронизации для захвата, и есть ли у вас это или нет, это не имеет значения. Если вы хотите, чтобы контекст синхронизации был захвачен (независимо от того, является ли текущий поток потоком пула потоков или нет), тогда вы не захотите позвонить ConfigureAwait.

Короче говоря, независимо от того, выполняете ли вы поток потоков пулов или нет, это не имеет никакого отношения к решению о том, следует ли захватить контекст синхронизации.

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