首页 > 解决方案 > 如何在任务中突破 Parallel.ForEach

问题描述

我正在运行 Parallel.ForEach 作为任务。我想在满足某个条件时摆脱它。考虑如下:

            Dim opt As System.Threading.Tasks.ParallelOptions = New System.Threading.Tasks.ParallelOptions With {
                .MaxDegreeOfParallelism = My.Settings.ssUserMaxThreads}

            Dim ttask = Task.Factory.StartNew(Sub()

                                                  Parallel.ForEach(filesList, opt,
                                                    Sub(rom As String)

                                                        ProcessROM(rom, romDS, ClassHash)

                                                        totalCount += 1
                                                        Debug.WriteLine("TotalCount: " & totalCount)

                                                        If totalCount > LimitedNumber Then
                                                            Debug.WriteLine("Limited number exceeded")
                                                            'What here?
                                                        End If

                                                        con.Invoke(CType(Sub()
                                                                             ReportProgress()
                                                                         End Sub, Action))

                                                        Application.DoEvents()

                                                    End Sub
                                                    )

                                              End Sub)

            Do Until totalCount > LimitedNumber
                Application.DoEvents()
            Loop

如果> ,我如何尽早摆脱这个Parallel.ForEachOR ?TasktotalCountLimitedNumber

标签: .nettaskbreakparallel.foreach

解决方案


您可以通过在 sub 中作为变量传递来使用 ParallelLoopState 类。Break 是一种对您的情况有用的方法。

       Parallel.ForEach(filesList, opt, Sub(rom As String, state as ParallelLoopState)
                        ProcessROM(rom, romDS, ClassHash)

                        .........
                        .........
                        If totalCount > LimitedNumber Then
                        Debug.WriteLine("Limited number exceeded")
                          state.Break();
                        End If
            ...........
            .........

有关更多详细信息,请参阅https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.parallelloopstate?view=netframework-4.8


推荐阅读