Каскадный ConfigureAwait (false), это необходимо? - PullRequest
0 голосов
/ 14 апреля 2020

Я занимаюсь разработкой приложения MVC5 ASP. NET, в котором у меня возникает следующий вопрос.

Если у меня есть действие в контроллере, определенном таким образом:

public async Task<ActionResult> MyAction()
{
    await MethodAsync().ConfigureAwait(false);
}

Затем, если MethodAsyn c вызывает другой метод asyn c, таким образом:

public async Task<bool> MethodAsync()
{
    await OtherMethodAsync().ConfigureAwait(false);
}

Имеет ли смысл повторно вызывать ConfigureAwait (false) внутри ожидаемого метода? Или я должен использовать значение по умолчанию (ConfigureAwait (true))?.

Спасибо, Jaime

1 Ответ

0 голосов
/ 14 апреля 2020

Каждый метод должен принять собственное решение о том, использовать ли ConfigureAwait(false). Если этот метод нуждается в своем контексте (в данном случае HttpContext.Curent / culture / identity), то он не должен использовать ConfigureAwait(false).

. Помните, что этот код:

await MethodAsync().ConfigureAwait(false);

примерно такой же, как этот код:

var task = MethodAsync();
var configuredTask = task.ConfigureAwait(false);
await configuredTask;

Другими словами, MethodAsync называется перед ConfigureAwait. Таким образом, метод вызывается с текущим контекстом, а затем ожидаемая задача ожидает без захвата контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...