Taskクラスを使用して、非同期処理を実行する場合、タスクの起動方法には、数通りの起動方法があります。
ここでは、タスクの起動方法について記載します。
Taskクラスは、NET Framework 4.0から使用できます。
・System.Threadingをインポートします。
戻り値の無いタスクの起動
Task.Start()を使用する方法
Dim task As Task = New Task( 'タスクの作成 Sub() System.Threading.Thread.Sleep(5000) '重たい処理 End Sub ) task.Start() 'タスク開始
Task.Factory.StartNew()を使用する方法
Dim task As Task = Task.Factory.StartNew( 'タスクを作成してタスクを起動 Sub() System.Threading.Thread.Sleep(5000) '重たい処理 End Sub )
Task.Run()を使用する方法
Dim task As Task = Task.Run( 'タスクを作成してタスクを起動 Sub() System.Threading.Thread.Sleep(5000) '重たい処理 End Sub )
Task.Run()は、.NET Framework4.5 から使用できます。
戻り値のあるタスクの起動
戻り値のあるタスクは、Task(Of TResult)の型を使用します。
以下の例は、Integer型の値を返すTask(Of Integer)です。
Task.Start()を使用する方法
Dim result As Task(Of Integer) = New Task( Function() As Integer System.Threading.Thread.Sleep(5000) '重たい処理 Return 1 End Function ) result.Start() 'タスク起動
Task.Factory.StartNew()を使用する方法
Dim result As Task(Of Integer) = Task.Factory.StartNew( Function() As Integer System.Threading.Thread.Sleep(5000) '重たい処理 Return 1 End Function )
Task.Ran()を使用する方法
Dim result As Task(Of Integer) = Task.Run( Function() As Integer System.Threading.Thread.Sleep(5000) '重たい処理 Return 1 End Function )
引数のあるタスクの起動
タスクで呼び出す関数クラスの例
Public Class TaskActionClass '引数のある関数 Public Sub Action1(count As Integer) For i As Integer = 0 To count System.Threading.Thread.Sleep(1000) Next End Sub '引数と戻り値のある関数 Public Function Action2(count As Integer) As Integer For i As Integer = 0 To count System.Threading.Thread.Sleep(1000) Next Return count End Function End Class
戻り値なし・引数あり 関数をタスク起動
Dim act1 = New TaskActionClass() Dim t As Task = Task.Run(Sub() act1.Action1(5)) 'または Dim t As Task = New Task(AddressOf act1.Action1, 5) t.Start()
戻り値あり・引数あり 関数をタスク起動
Dim act1 = New TaskActionClass() Dim t = Task.Run(Function() act1.Action2(5)) 'また厳密には Dim t As Task(Of Integer) = Task.Run(Function() act1.Action2(5))
※タスクの起動のコーディングには、いろいろな方法があります。NET Frameworkのバージョンによっても異なりますので、状況に合わせて使用してください。