首页 文章

c#Parallel用于微小延迟的循环

提问于
浏览
2

我有一个非常简单的for循环,看起来像这样

for(int i = 0; i< 26; i++)
{
    DoSomething(i);
}

DoSomething函数大约需要3分钟才能执行 . 我想写一个for循环,每分钟调用DoSomething()而不等待前一个调用完成 . 我试着这样做:

Parallel.For(0, 26, i =>
{
    DoSomething(i);
    System.Threading.Thread.Sleep(60000);
}

但它不起作用,因为它首先打电话然后睡觉 . 反转这些步骤也意味着DoSomething方法在每次调用之间无延迟地调用fire . 如何设置它以便每分钟调用DoSomething?

谢谢!

2 回答

  • 4

    您可以使用Task.Delay,它在内部使用 Timer 对象:

    public async Task DoSomethingAndWaitAsync()
    {
        int i = 0
        while (i < 26)
        {
            Task.Run(() => DoSomething(i));
            await Task.Delay(TimeSpan.FromMinutes(1));
    
            i++;
        }
    }
    

    或者如果你想保持 for 循环:

    public async Task DoSomethingAndWaitAsync()
    {
        for (int i = 0; i < 26; i++)
        {
            Task.Run(() => DoSomething(i));
            await Task.Delay(TimeSpan.FromMinutes(1));
        }
    }
    
  • 2
    for (int i = 0 ; i < 26 ; i++)
    {
        Task.Run(
            () =>
            {
                DoSomething(i);
            }
        );
    
        Thread.Sleep(TimeSpan.FromMinutes(1));
    }
    

相关问题