я думаю, что я мог бы решить ее ..
Imports System.Threading
Module Module1
Sub Main()
Dim t As New Tool
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
Thread.Sleep(1500)
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
t.Update()
Thread.Sleep(1500)
t.Update()
Thread.Sleep(1500)
t.Update()
Thread.Sleep(5500)
t.Update()
Thread.Sleep(10000)
t.Update()
t.WaitToJoin()
Console.WriteLine("Done")
End Sub
End Module
Public Class Tool
'Thread Stuff
Private threads As Integer = 0
Private threadsdone As AutoResetEvent = New AutoResetEvent(False)
Public Sub WaitToJoin()
If Interlocked.Read(threads) > 0 Then
threadsdone.WaitOne(New TimeSpan(0, 0, 30)) ' just to be sure not to lock forever, by some wierd reason, a timeout on 30 sec is added
End If
End Sub
Public Sub Update()
Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(AddressOf HardWork), "Doing dome hard work...")
End Sub
Public Sub HardWork(ByVal state As Object)
Dim num As Integer = Interlocked.Increment(threads)
Console.WriteLine(num & " - " & state)
Thread.Sleep(10000)
If Interlocked.Decrement(threads) = 0 Then
threadsdone.Set()
End If
End Sub
End Class
хорошо главная проблема в том, что мне нужно знать, когда ВСЕ мои задачи выполняются, как 1 задача может длиться дольше, чем другая. Если я только отслеживаю последнюю задачу, я могу наблюдать за одним из тех, кто занимает больше времени – Droa