佐々木屋

技術的なことから趣味まで色々書きます

非同期処理、マルチスレッド(Task②戻り値、引数がある場合)

前回は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