并行ForEach在产生前等待500毫秒

cs0*_*815 1 .net c# plinq

我有这种情况:

var tasks = new List<ITask> ...
Parallel.ForEach(tasks, currentTask => currentTask.Execute() );
Run Code Online (Sandbox Code Playgroud)

是否有可能指示PLinq在下一个线程产生之前等待500ms?

System.Threading.Thread.Sleep(5000);
Run Code Online (Sandbox Code Playgroud)

Sco*_*ain 6

您使用Parallel.Foreach完全错误,您应该制作一个特殊的枚举器,其速率限制自己每500毫秒获取一次数据.

由于你没有提供任何细节,我对你的DTO如何运作做了一些假设.

private IEnumerator<SomeResource> GetRateLimitedResource()
{
    SomeResource someResource = null;
    do
    {
        someResource = _remoteProvider.GetData();

        if(someResource != null)
        {
             yield return someResource;
             Thread.Sleep(500);
        }
    } while (someResource != null);
}
Run Code Online (Sandbox Code Playgroud)

这是你的并列应该如何看待

Parallel.ForEach(GetRateLimitedResource(), SomeFunctionToProcessSomeResource);
Run Code Online (Sandbox Code Playgroud)