c#Parallel For循环,具有微小延迟

时间:2015-05-28 17:30:32

标签: c# task-parallel-library parallel.foreach parallel.for

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

答案 0 :(得分:4)

您可以使用内部使用Timer对象的Task.Delay

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));
    }
}

答案 1 :(得分:2)

for (int i = 0 ; i < 26 ; i++)
{
    Task.Run(
        () =>
        {
            DoSomething(i);
        }
    );

    Thread.Sleep(TimeSpan.FromMinutes(1));
}