List(Of Task)

List Task 回傳記錄

Imports System.Threading


Module Module1

    Sub Main()

        Dim action As Func(Of Integer, Integer, Integer, ret) = AddressOf Run
        Dim tasks = New List(Of Task(Of ret))()
        For i As Integer = 0 To 2
            tasks.Add(Task.Factory.StartNew(Function()
                                                Dim taskId = Thread.CurrentThread.ManagedThreadId
                                                Console.WriteLine(String.Format("Task{0}_Start: {1:yyyy/mm/dd hh:mm:ss.fff}", taskId, Now))
                                                Dim result = action.Invoke(taskId, i, 3000)
                                                Console.WriteLine(String.Format("Task{0}_End: {1:yyyy/mm/dd hh:mm:ss.fff} ", taskId, Now))
                                                Return result
                                            End Function))

        Next
        '等待 所有task結束 
        Task.WaitAll(tasks.ToArray())
        tasks.ForEach(Sub(t)
                          Console.WriteLine(String.Format("Task Result Data:{0}", t.Result.Val))
                      End Sub)
        Console.WriteLine("Done")
        Console.ReadLine()
    End Sub

    Function Run(taskId As Integer, ct As Integer, wait As Integer) As ret
        Dim result = New ret(taskId * ct)
        Console.WriteLine(String.Format("Method{0}_Start: {1:yyyy/mm/dd hh:mm:ss.fff} Data:{2}", taskId, Now, result.Val))
        Thread.Sleep(wait)
        Console.WriteLine(String.Format("Method{0}_End: {1:yyyy/mm/dd hh:mm:ss.fff} Data:{2}", taskId, Now, result.Val))
        Return result
    End Function

End Module

Public Class ret
    Public Sub New(v As Integer)
        Me.Val = v
    End Sub
    Public Property Val As Integer
End Class