В C# У меня есть следующие два простых примера:.ждут Task.Delay() против Task.Delay() Wait()
[Test]
public void TestWait()
{
var t = Task.Factory.StartNew(() =>
{
Console.WriteLine("Start");
Task.Delay(5000).Wait();
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
[Test]
public void TestAwait()
{
var t = Task.Factory.StartNew(async() =>
{
Console.WriteLine("Start");
await Task.Delay(5000);
Console.WriteLine("Done");
});
t.Wait();
Console.WriteLine("All done");
}
Первый пример создает задачу, которая печатает "Start", ждет 5 секунд печатает «Готово», а затем завершает задачу. Я жду завершения задачи и затем распечатаю «Все сделано». Когда я запускаю тест, он делает так, как ожидалось.
Второй тест должен иметь такое же поведение, за исключением того, что ожидание внутри задачи должно быть неблокирующим из-за использования async и ожидания. Но этот тест просто печатает «Старт», а затем сразу «Все сделано» и «Готово» никогда не печатается.
Я не знаю, почему я получаю такое поведение: S Любая помощь будет оценена очень :)
Task.Delay неблокирующая. Я не вижу причин, по которым вы бы использовали вторую конструкцию. –
@RoyDictus у них обоих есть свои проблемы. Вы никогда не должны вызывать 'Task.Wait()' – Gusdor
возможный дубликат [Ожидание async/ожидание внутри задачи] (http://stackoverflow.com/questions/24777253/waiting-for-async-await-inside-a- task) – i3arnon