连续的.NET并行';s-在每个

连续的.NET并行';s-在每个,.net,parallel-processing,.net,Parallel Processing,我有几个平行的。连续操作 我目前正在检查每个Parallel.For的返回值ParallelLoopResult,并休眠20毫秒,直到IsCompleted成员设置为true Dim plr as ParallelLoopResult plr = Parallel.For(...) while not plr.IsCompleted Thread.Sleep(20) end while plr = Parallel.For(...) while not plr.IsComplet

我有几个平行的。连续操作

我目前正在检查每个Parallel.For的返回值
ParallelLoopResult
,并休眠20毫秒,直到
IsCompleted
成员设置为true


Dim plr as ParallelLoopResult 

plr = Parallel.For(...)

while not plr.IsCompleted
  Thread.Sleep(20)
end while

plr = Parallel.For(...)

while not plr.IsCompleted
  Thread.Sleep(20)
end while

.
.
.

如何添加内核级块(即WaitHandle)来代替循环和Thread.Sleep?是否存在与触发器并行的完成事件?Parallel.For是否提供了这样一种机制?

Parallel.For将完成所有调用的代码。
IsCompleted
仅返回
false
,然后循环被中断

发件人:

如果IsCompleted返回true,则循环运行到完成,从而执行循环的所有迭代。如果IsCompleted返回false,LowestBreakIteration返回null,则调用Stop来提前结束循环。如果IsCompleted返回false,LowestBreakIteration返回非null整数值,则使用Break提前结束循环


对于
Parallel.for()
,您无法获得
WaitHandle
,并且您不需要-调用是同步的(所有迭代将在调用完成后完成)。如果需要在其他线程上执行循环本身,而不仅仅是迭代,则必须将其包装在
Task
thread
中,并且该对象将为您提供等待句柄。但是,如果您要在调用
Parallel.for()
(与示例代码中一样)的同一线程上等待结果,则没有任何意义。

True,但没有回答我的问题,即如何使用内核级构造等待循环完成。但是,没有什么可等待的。它认为,你要问的是,如何使线程休眠,直到一些甚至是
IsCompleted
的信号被更改。问题是
IsCompleted
Parallel.For
完成后将永远不会更改。如果我创建了一个WaitHandle,当Parallel.For完成时,我如何向该等待句柄发送信号?在所有任务完成之前,AFAIK a Parallel.For不会阻塞。我需要阻塞直到循环完成,最好使用内核级的mechansim。
Parallel.For
将始终在返回之前完成。我想你要找的是
Task.Factory.StartNew()