具有分钟延迟的c#并行For循环

本文关键字:并行 For 循环 分钟 延迟 | 更新日期: 2023-09-27 17:50:59

我有一个非常简单的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 ?

谢谢!

具有分钟延迟的c#并行For循环

您可以使用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));
    }
}
for (int i = 0 ; i < 26 ; i++)
{
    Task.Run(
        () =>
        {
            DoSomething(i);
        }
    );
    Thread.Sleep(TimeSpan.FromMinutes(1));
}