c# - foreach异步 sleep 方法

标签 c# winforms visual-studio

我正在尝试使我的 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/

相关文章:

c# - 如何: *. csv -->行-->someArray-->修改

c++ - Microsoft Visual Studio 2017 中的 wxWidgets 设置

c# - 为什么 Visual Studio 在选择设备时尝试部署到模拟器

c# - 我在哪里可以了解正确的 C# 项目架构设计?

c# - WaveInEvent处理程序多久触发一次?

javascript - 如何从代码隐藏中读取JavaScript设置的文本框文本?

C# - 查找 Winform 应用程序的坐标

c# - 使用纯.net框架生成并签署证书请求

c# - 带有 for 每个循环的组合框

python - 管理OpenCV python Cmake Studio Windows