[英]Task Parallel.For Parallel.ForEach Load Balancing, partiioning .Net
[英]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.