作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下程序:
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 中的异步/等待功能,但始终没有效果。同样,我无法解释。
最佳答案
问题是您正在使用 return new Task(() => Thread.Sleep(1500));
而不是 Task.Run
。
new Task
实际上并没有启动任务,这将导致 await
永远不会触发。
相反,尝试:
private static Task DoIOWorkAsync() {
Console.WriteLine("Doing work...");
return Task.Run(() => Thread.Sleep(1500));
}
或者,更好的是:
private static async Task DoIOWorkAsync() {
Console.WriteLine("Doing work...");
await Task.Delay(1500);
}
关于c# - 为什么这个程序会挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18449675/
我是一名优秀的程序员,十分优秀!