我想在for循环中做一些事情,并使用'await Task.Delay()'。但是我总是空着走,应该返回10。
public class Test {
public async Task<int> test() {
int sum=0;
for (int i = 0; i < 10; i++) {
System.Diagnostics.Debug.Write("start loop");
sum++;
await Task.Delay(1000);
System.Diagnostics.Debug.Write("finish loop");
}
return sum;
}
}
//主要的
Test test = new Test()
var test1 = test.test().Result;
您的问题似乎是等待test().Result
导致死锁。原因是这条线
await Task.Delay(1000);
将执行流返回给调用方,然后调用test().Result
方等待任务完成。因此,您的主线程正在阻塞。
的await
在上述行试图恢复的执行test
时Task.Delay()
完成。但是默认情况下,它会尝试在您的调用线程上恢复执行。是的,当前由于等待而被阻塞的线程Result
。
一种解决方案可能是将行更改为:
await Task.Delay(1000).ConfigureAwait(false);
这导致await
不再尝试在原始线程上恢复,而是在其他线程上恢复。这样,您可以避免死锁,并且程序应继续执行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句