ImmortalCAT
@ImmortalCAT
C# loving

Какая разница в асинхронных методах?

string ret = await FileIO.ReadTextAsync(file);
и
var ret = FileIO.ReadTextAsync(file);
string str = ret.Result;

не казните...
но какая разница?
  • Вопрос задан
  • 433 просмотра
Решения вопроса 1
Nipheris
@Nipheris Куратор тега C#
Разница в том, что await можно использовать только в async-методе, и его использование подразумевает, что компилятор превратит метод в сопрограмму, и в том месте, где стоит await, его выполнение можно будет приостановить и переключиться на что-то еще.

Использование Result остановит ваш поток до тех пор, пока таск не завершится и не вернет результат. Но Result можно использовать и в обыкновенном методе, не только async (в async методе его использовать абсолютно бессмысленно).

Кроме того, использование Result влечет за собой неочевидные эффекты в виде возможности дедлоков и усложняет обработку исключений (т.к. Result всегда кидает AggreagteException, в который оборачивается исключение, брошенное внутри таска), подробнее смотрите тут stackoverflow.com/questions/24623120/await-on-a-co...

Как первый ответ отвечает на ваш вопрос я не понимаю)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AlekseenkoAV
Разница в том, что в первой части исполняющий поток будет ожидать завершения, а в во второй части исполняющий поток не будет ожидать заверения метода и будет двигаться далее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы