Task.FromResult против асинхронного без ожидания - PullRequest
0 голосов
/ 11 октября 2019

Являются ли приведенные ниже два фрагмента кода эквивалентными?

Использование Task.FromResult

public Task<string> Foo() {
    return Task.FromResult("foo");
}

Использование асинхронной синхронизации без ожидания

public async Task<string> Foo() {
    return "foo";
}

Если не эквивалентно, в чем разница?

Ответы [ 2 ]

4 голосов
/ 11 октября 2019

Для конечного пользователя ответом является Да .

Но сгенерированный код из C # компилятора будет сильно отличаться.
async / await генерирует конечный автомат.

Вы можете проверить сгенерированный код здесь и более о конечном автомате здесь и здесь если ты заинтересован.

0 голосов
/ 11 октября 2019

Единственное отличие состоит в том, что асинхронная оболочка оборачивает исключения в возвращаемой Задаче со следом стека, определяемым тем, где вы ожидаете .

В основном вам приходится выбирать между производительностью и безопасностью.

...