Недавно я столкнулся с некоторым асинхронным кодом с асинхронным ожиданием. Мой вопрос заключается в чем разница между двумя блоками кода ниже -Вызов с двумя асинхронными вызовами
Код блока - 1
public async Task Method1(string fileName)
{
await Method2(fileName);
}
public async Task Method2(string filePath)
{
await Task.Run(() =>{
//do some task
});
}
Блок кода - 2
public async Task Method1(string fileName)
{
await Method2(fileName);
}
public async Task Method2(string filePath)
{
Task.Run(() =>{
//do some task
});
}
Разница между этими двумя кодами ожидаем по методу2. Что происходит, когда третий метод (например, метод3) вызывает метод 1? Каковы различия в исполнении, наблюдаемые в методе 3?
Код №2 должен дать вам предупреждение, объясняющее, в чем разница. Не игнорируйте предупреждения от компилятора. – svick
@svick Спасибо. Компилятор говорит, что метод не имеет ожидающего оператора и будет работать синхронно. Теперь подумайте о методе3, о котором я упомянул. Когда метод3 вызывает метод 1, управление возвращается в метод3 после достижения ожидающего вызова в обоих случаях. Итак, какая разница? – Muctadir
Разница заключается в том, когда завершена 'Task', возвращаемая из' Method1'. С # 2 он будет завершен немедленно (не дожидаясь завершения 'Task' в' Task.Run() '). – svick