Передача задачи как результатC#

Место общения программистов C#
Ответить
Anonymous
 Передача задачи как результат

Сообщение Anonymous »

Я много раз читал, что НЕ ожидание задачи, вероятно, является ошибкой в ​​коде, но я изо всех сил пытаюсь понять это таким образом.
Есть ли какая-нибудь ловушка? не ожидает Task в примере метода PassDoSomethingWoAsync ниже?
Я предполагаю, что если мне нужно просто передать «результат» одного асинхронного метода без какой-либо дальнейшей обработки, как в Task PassDoSomethingWoAsync(string message) => DoSomethingAsync(message), Task лучше возвращать без async/

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

awaitКлючевые слова 
, чтобы убедиться, что конечный автомат не создан. Это более эффективно, чем асинхронный метод Task PassDoSomethingAsync(string message) => await DoSomethingAsync(message)

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

public class MyEngine
{

public async Task PassDoSomethingAsync(string message) => await DoSomethingAsync(message).ConfigureAwait(false);  // awaited

public Task PassDoSomethingWoAsync(string message) => DoSomethingAsync(message);    // not awaited

public async Task DoSomethingAsync(string message)
{
await Task.Delay(1000);
Console.WriteLine($"DoSomethingAsync: {message}");
}
}
Я протестировал этот подход в простом приложении, представленном ниже, и не могу понять, что может пойти не так. Я что-то упустил?

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

Console.WriteLine("App started");
var engine = new MyEngine();

await engine.PassDoSomethingWoAsync("Without Async");
await engine.PassDoSomethingAsync("Async");

Console.WriteLine("App finished");
Вывод на консоль:

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

App started
DoSomethingAsync: Without Async
DoSomethingAsync: Async
Я создал образец скрипта https://dotnetfiddle.net/CzgqqN с исключениями, и даже исключения обрабатываются правильно (перехватываются).

Подробнее здесь: https://stackoverflow.com/questions/791 ... -as-result
Ответить

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

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

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

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

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