簡體   English   中英

如何在任務中突破 Parallel.ForEach

[英]How to break out of Parallel.ForEach within a Task

我正在運行 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

如果totalCount > LimitedNumber我如何盡早擺脫這個Parallel.ForEach OR Task

您可以通過在 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM