У меня есть следующие программы:Почему эта программа просто висит?
static void Main(string[] args) { RunTest(); }
private static void RunTest() {
DoIOWorkFiveTimesAsync().Wait();
}
private static async Task DoIOWorkFiveTimesAsync() {
for (int i = 0; i < 5; ++i) {
Console.WriteLine("Before: " + i);
await DoIOWorkAsync();
Console.WriteLine("After: " + i);
}
}
private static Task DoIOWorkAsync() {
Console.WriteLine("Doing work...");
return new Task(() => Thread.Sleep(1500));
}
Я бы ожидать, чтобы увидеть:
Before: 1
Doing work...
After: 1
Before: 2
Doing work...
After: 2
Before: 3
Doing work...
After: 3
Before: 4
Doing work...
After: 4
Before: 5
Doing work...
After: 5
Но вместо этого, он получает:
Before: 1
Doing work...
И никогда не получает дальше. Я попытался и попытался понять функции async/await в C# 5, но всегда не имел никакого эффекта. Опять же, объяснение ускользает от меня.
Если вы имели 'SynchronizationContext' результат будет очевиден, блокировка ожидания предотвращает продолжений от быть запланированы, но поскольку вы не устанавливаете его, это не должно происходить ... – Servy
Вы должны использовать 'Task.Delay' для создания задачи, которая будет выполнена за X миллисекунды вместо того, что вы делаете. Ваш метод блокирует поток на время ожидания. – Servy