使用用Semaphore信号量进行线程并发数量控制。
下面的代码简单容易理解,是出力excel通过Semaphore信号量控制并行线程数量。
Imports System.Threading
Imports System.Threading.Tasks
Public Class FormSemaphore
Private Sub FormSemaphore_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
SetDataReport()
End Sub
Private Sub SetDataReport()
'信号量来限制并发数量
Dim semaphore As New Semaphore(1, 5) '初期线程数:1,最大线程数5
'Task任务集合
Dim tasks As New List(Of Task)()
'方法转成action,可以加入到task里。
Dim action As Action(Of Object) =
Sub(obj As Object)
'进行信号量控制等待
semaphore.WaitOne()
'自定义业务方法
OutExcel(obj)
'进行信号量释放
semaphore.Release()
End Sub
'可以自定义业务数据进行循环操作。
For i As Integer = 0 To 10
tasks.Add(Task.Factory.StartNew(action, i))
Next
'进行并发线程控制。
Task.WaitAll(tasks.ToArray())
End Sub
Private Sub OutExcel(obj As Object)
'obj是参数,可以自定义使用。
Try
'ExportExcel是自定义方法。如果执行识别重新执行。
If ExportExcel(obj) = False Then
OutExcel(obj)
End If
Catch ex As Exception
OutExcel(obj)
End Try
End Sub
Private Function ExportExcel(obj As Object) As Boolean
'obj是参数,可以自定义使用。
Try
'自定义方法内容...
Return True
Catch ex As Exception
Return False
End Try
End Function
End Class
Semaphore 信号量官网详细说明连接Semaphore 类 (System.Threading) | Microsoft Learn
如果资源学习了,可以点赞关注!