使用async和await与System.Threading.Thread.Sleep

10

我开始使用.NET 4.5的async和await。所有的例子似乎都使用以下方式来模拟长时间操作:

await Task.Delay(3000);

现在我的长期计算非常类似于:

System.Threading.Thread.Sleep(3000)
例如:
for(i=0;i<1000000000;i++)
    i=i*2;

如何使用async和await使此代码正常工作?现在,似乎我只能使用像webrequests、WCF等方法来配合这个优秀的新方法。

我哪里理解有误了吗?


你所说的“我的长期计算和Thread.Sleep非常相似”是什么意思?我无法想象它们会真正进入睡眠状态。 - Jon Skeet
不,我的意思是它们会阻塞,就像for循环一样?我想要实现的基本上是等待一个长时间运行的for循环。 - Enrico
也许更好的说法是,可以使用.Sleep(3000)函数来近似计算持续时间,而不是说你的计算非常相似? - HansLindgren
1个回答

18
await Task.Run(() => Thread.Sleep(10000))

可以用,但没有意义。


是的,但这正是我所需要的。我可以用阻塞函数替换Thread.Sleep,这样就可以工作了!!谢谢,看起来像个愚蠢的问题,但这对我帮助很大。 - Enrico
1
你说这没有意义,但在异步函数中,这不会帮助我避免阻塞吗?如果这样做,你的线程可以去做其他工作。我特别是在 IIS 中运行时这么说。 - Zapnologica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接