前回はTaskクラスの実行方法を説明しました。メソッドは戻り値、引数が無いvoidを例としていますが、戻り値や引数がある場合のメソッドをTaskに実行させることも可能です。
なお、今回のコードはRunメソッドを採用します。Factory.StartNewメソッドでも書き方は一緒です。.NET Framework4.5未満の方は、Factory.StartNewに変更して使って下さい。
また、メソッドの指定はラムダ式で書いています。VB.NETに匿名メソッドが無い為、ラムダ式を採用しました。お好きな方でどうぞ。
戻り値があるメソッドのTask実行
private string HeavyProc() { for (int i = 0; i <= 5; ++i) { System.Threading.Thread.Sleep(1000); Console.WriteLine("Hoge"); } return "HogeHoge"; } public static void Main() { Task<string> t = Task<string>.Run(() => HeavyProc()); Console.WriteLine(t.Result); }
Private Function HeavyProc() As String For i As Integer = 0 To 5 System.Threading.Thread.Sleep(1000) Console.WriteLine("Hoge") Next Return "HogeHoge" End Function Public Shared Sub Main() Dim t As Task(Of String) = Task.Run( Function() Return HeavyProc() End Function) Console.WriteLine(t.Result) End Sub
戻り値が無く、引数がある場合
private string HeavyProc(string naiyo) { for (int i = 0; i <= 5; ++i) { Thread.Sleep(1000); Console.WriteLine(naiyo); } } public static void Main() { Task t = Task.Run(() => HeavyProc("Hoge")); }
Private Function HeavyProc(ByVal naiyo As String) As String For i As Integer = 0 To 5 Thread.Sleep(1000) Console.WriteLine(naiyo) Next End Sub Public Shared Sub Main() Dim t As Task = Task.Run( Sub() HeavyProc("Hoge") End Sub) End Sub
戻り値があり、引数もある場合
private string HeavyProc(string naiyo) { for (int i = 0; i <= 5; ++i) { System.Threading.Thread.Sleep(1000); Console.WriteLine(naiyo); } return "HogeHoge"; } public static void Main() { Task<string> t = Task<string>.Run(() => HeavyProc("Hoge")); Console.WriteLine(t.Result); }
Private Function HeavyProc(byval naiyo As String) As String For i As Integer = 0 To 5 System.Threading.Thread.Sleep(1000) Console.WriteLine(naiyo ) Next Return "HogeHoge" End Function Public Shared Sub Main() Dim t As Task(Of String) = Task.Run( Function() Return HeavyProc("Hoge") End Function) Console.WriteLine(t.Result) End Sub