非同期メソッドを作成するには

何も値を返さない非同期メソッド

.NetFramework4.5では、多くの非同期メソッドが導入され、「~Async」という名前で実装されています。

自分で非同期メソッドを作るときもこの規則にのっとって非同期メソッドを作成しましょう。
重い処理をTask.Runで非同期実行し、「~Async」メソッドと書いて実行する側はawaitしましょう。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    await DelayAsync();
    
}

//非同期メソッド
private Task DelayAsync()
{
    return Task.Run(() =>
    {
        //5秒間待つ
        Task.WaitAll(Task.Delay(TimeSpan.FromSeconds(5)));
    });
}

WindowsRuntimeでは値を返さない非同期メソッドはIAsyncActionインターフェースが担当します。

private IAsyncAction StartAsyncActionAsync()
{
    return AsyncInfo.Run((token) =>
    {
        return Task.Run(() =>
        {
            //5秒間待つ
            Task.WaitAll(Task.Delay(TimeSpan.FromSeconds(5)));
        });
    });
}

 

値を返す非同期メソッド

先ほどの例は何も値をかえさない非同期メソッドですが、ジェネリックにより値を返す非同期メソッドを作成することができます。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    string str= await DelayAsync();
    
}

//非同期メソッド
private Task<string> DelayAsync()
{
    return Task.Run(() =>
    {
        //5秒間待つ
        Task.WaitAll(Task.Delay(TimeSpan.FromSeconds(5)));
        string result="処理完了";
        return result;
    });
}

非同期メソッドが処理を完了したとき、string型のstrに戻り値が入ります。

WindowsRuntimeでは値を返す非同期メソッドはIAsyncOperationが担当します。

private async void Button_Click(object sender, RoutedEventArgs e)
{
    string str= await DelayAsync();
    
}

private IAsyncOperation<string> StartAsyncOperationAsync()
{
    return AsyncInfo.Run<string>((token) =>
    {
        return Task.Run<string>(() =>
        {
            //5秒間待つ
            Task.WaitAll(Task.Delay(TimeSpan.FromSeconds(5)));
            string result="処理完了";
            return result;
        });
    });
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください