C# 什么';实现并行无限循环的最佳方法是什么?

C# 什么';实现并行无限循环的最佳方法是什么?,c#,.net,parallel-processing,parallel-extensions,parallel-for,C#,.net,Parallel Processing,Parallel Extensions,Parallel For,我已经习惯了在.Net的并行扩展中使用Parallel.For(),因为这是一种简单的并行化代码的方法,而无需手动启动和维护线程(这可能很麻烦)。我现在看到的是一个我希望并行化的无限循环(在我发出停止信号之前做一些事情),没有一个无参数的并行。原则上,我可以这样做: Parallel.For(0, int.Max) for(;;) { Parallel.For(0, 128, delegate() { // Do stuff. } } 但我怀疑这可能不是

我已经习惯了在.Net的并行扩展中使用Parallel.For(),因为这是一种简单的并行化代码的方法,而无需手动启动和维护线程(这可能很麻烦)。我现在看到的是一个我希望并行化的无限循环(在我发出停止信号之前做一些事情),没有一个无参数的并行。原则上,我可以这样做:

Parallel.For(0, int.Max)
for(;;)
{
    Parallel.For(0, 128, delegate()
    {
       // Do stuff.
    }
}
但我怀疑这可能不是工作分区逻辑处理(?)的预期/有效模式

另一种选择是:

Parallel.For(0, int.Max)
for(;;)
{
    Parallel.For(0, 128, delegate()
    {
       // Do stuff.
    }
}
但这似乎不雅观,也可能导致工作划分效率低下

现在我的直觉是通过创建和维护我自己的线程来手动完成这项工作,但我想获得一些反馈/意见。谢谢

==更新===

我使用的是已接受答案中文章中的代码的简化版本(我删除了ParallelOptions参数)。这是密码

public class ParallelUtils
{
    public static void While(Func<bool> condition, Action body) 
    { 
        Parallel.ForEach(IterateUntilFalse(condition), ignored => body()); 
    }

    private static IEnumerable<bool> IterateUntilFalse(Func<bool> condition) 
    { 
        while (condition()) yield return true; 
    }
}
公共类并行
{
公共静态无效While(函数条件、动作体)
{ 
ForEach(IterateUntilFalse(条件),忽略=>body());
}
私有静态IEnumerable IterateUntilFalse(Func条件)
{ 
而(condition())返回true;
}
}
一个示例用法是:

Func<bool> whileCondFn = () => !_requestStopFlag;
ParallelUtils.While(whileCondFn, delegate()
{
    // Do stuff.


});
Func whileCondFn=()=>_请求停止标志;
ParallelUtils.While(whileCondFn,delegate()
{
//做事。
});
如果你(真的)想要一些无限的东西,那么你需要尽可能少的内核。没有一个是并行的。因为_将是一个不错的选择

您(可能)需要的是一个单独的线程或使用LongRunning选项创建的任务


然后让它等待信号量,或者作为最后手段,尽可能经常地调用Sleep()

Stephen Toub有一篇关于的帖子。

考虑到这是无限微积分的请求,但是你需要在每个“循环”上都有一些有限状态,我想说我会用一个外部
为(;;)
循环更改一个解来执行一个
Parallel.ForEach(…)
调用某些事件/状态更改。像
监视器
信号、
事件
通知或类似的东西……

是否有任何线程模型可供使用此问题的上下文是它是一个数据挖掘项目。我正在获取当前无限期运行的数据分析代码(例如,在夜间运行,然后在第二天早上发出停止的信号),并将其分配给多个线程,因此我确实希望它在所有内核上无限期运行。@locster-有一个主线程“无限”创建工作子线程的线程。Stephen Toub post对于像我这样的noob来说是相当先进的。请给出一个关于最佳/推荐方法的简单示例。这是评论还是回答?链接已失效