我正在尝试使我的 foreach 循环异步。循环第一次循环,做某事然后等待 40 秒,然后循环再次循环做某事,等待 40 秒等...
在我的情况下,我循环发送推文,获取推文用户名,然后向他们发送推文。
我尝试使用 Thread.Sleep(40000)
方法,但这只会卡住应用程序,我无法使用它,循环不会停止 40 秒,然后再次循环。应用程序卡住但循环没有,推文甚至根本没有等待就被发送了。这是我的代码的样子
private void tweetButton_Click(object sender, EventArgs e)
{
var tweets= .........
foreach (var tweet in tweets)
{
// Do Something
System.Threading.Thread.Sleep(40000);
}
如何让 foreach 循环在再次循环之前暂停,以及如何在不卡住我的应用程序的情况下让它暂停?
最佳答案
https://msdn.microsoft.com/en-us/library/hh194873(v=vs.110).aspx
我认为您可以await Task.Delay(40000);
- 对我来说这就是您所要求的“异步 sleep ”。
或者,您可以启动计时器。计时器可能是更好的选择,但会在线程池线程上运行。
编辑:不确定为什么会得到 -1...但如果有人有解释,我会很感兴趣。
我已验证“await Task.Delay(xyz)”确实适用于此目的。当然,您需要添加 async
关键字。
static async void DoSomething()
{
for(var i = 0;i<25;i++)
{
// Do Something
await Task.Delay(1000);
Console.WriteLine("Sending a Tweet");
}
}
我无法评价性能,但它似乎对我来说效果很好。
关于c# - foreach异步 sleep 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34487320/