Когда и почему мне следует использовать 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

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