Резюме. В методе библиотеки, когда следует использовать ключевые слова async и await вместо прямого возврата Task?
Я считаю, что мой вопрос связан с этим. Однако этот вопрос касается .NET 4.0 и TPL, в то время как я использую .NET 4.6 с ключевыми словами async и await. Итак, я думаю, что мой вопрос может получить разные ответы, потому что эти ключевые слова не существовали, когда был задан связанный вопрос.
Объяснение: Я пишу простую оболочку для внешней службы WCF, и оболочка делает несколько вызовов SendAsync. Теперь я думаю, что каждый метод обертки должен просто вернуть Task<> напрямую, не ожидая. Я понимаю, что async/await следует использовать на уровне приложения, а не в библиотеке.
Итак, например, вот такой подход, который, как я думаю, должен взять для каждого метода обертки:
private Task<SignResponse> GetSignDataAsync(SigningRequestType request)
{
return _service.SendAsync(request);
}
Но в Интернете я нашел несколько сообщений, которые используют этот подход:
private async Task<SignResponse> GetSignDataAsync(SigningRequestType request)
{
return await _service.SendAsync(request).ConfigureAwait(false);
}
И вот еще один пример, который я нашел в technet:
async Task PutTaskDelay()
{
await Task.Delay(5000);
}
private async void btnTaskDelay_Click(object sender, EventArgs e)
{
await PutTaskDelay();
MessageBox.Show("I am back");
}
Итак, когда я должен использовать второй подход (тот, который включает ключевые слова async и await)? Почему бы просто не вернуть целое Task без создания PutTaskDelay async? Я думаю, что я должен возвращать Task напрямую, когда это возможно, и использовать async/await, чтобы получить окончательный результат только на прикладном уровне. Я прав? Если нет, в чем разница между двумя подходами, которые я показываю здесь?
Моя забота. Когда используются ключевые слова async и await, кажется, что он просто предоставляет дополнительную работу компилятору без каких-либо преимуществ.