我有以下程序:這個程序爲什麼只是掛起?
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...
而且從來沒有得到任何進一步。我試過並試圖理解C#5中的異步/等待功能,但始終無效。再說一遍,我的解釋不見了。
如果你有一個'SynchronizationContext'其結果將是顯而易見的,阻塞等待阻止延續被預定,但因爲你沒有設置它,所以這不應該發生...... – Servy
你應該使用Task.Delay來創建一個任務,這個任務將在X毫秒內完成,而不是你正在做的事情。您的方法在等待期間阻塞線程。 – Servy