Когда и почему мне следует использовать ConfigurationAwait(false) в C# async/await?C#

Место общения программистов C#
Ответить
Anonymous
 Когда и почему мне следует использовать ConfigurationAwait(false) в C# async/await?

Сообщение Anonymous »

Я работаю над приложением C# и сталкивался с ситуациями, когда не был уверен, следует ли мне использовать ConfigurationAwait(false) при вызовах await. Я прочитал некоторую документацию, но практические последствия и возможные подводные камни до сих пор неясны.
Я это знаю:
  • Код: Выделить всё

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

Возьмите, к примеру:

Код: Выделить всё

public class MyLibraryService
{
public async Task GetDataAsync()
{
using (var client = new HttpClient())
{
// Should I add ConfigureAwait(false) here?
var response = await client.GetStringAsync("https://example.com");
return response.ToUpper();
}
}
}
Если эта библиотека используется приложением пользовательского интерфейса, каковы последствия await client.GetStringAsync(...) по сравнению с await client.GetStringAsync(...).ConfigureAwait(false)?
Я просмотрел документацию MSDN и различные сообщения в блогах. Некоторые говорят «всегда используйте его в библиотеках», другие говорят «только при необходимости». Вот в этом и заключается путаница.

Подробнее здесь: https://stackoverflow.com/questions/798 ... sync-await
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»