Developer's Code

プログラム開発支援ブログ

Developer's Code

async / await 非同期処理を使おう

はじめに

本日は、async & awaitを使用した非同期について以下に示します。

※ Xamarin.Forms

 

概要

最近の提供APIは、非同期処理必須で扱うことが必須で困ります(笑)

そんな訳で、今回はasync & awaitについて簡単に説明していきます。

非同期処理が主流になってきているのは、タッチ操作が当たり前になってきたからでしょうか。タッチ操作にて、待ち時間が発生すると体感上ストレスを感じます。だ・か・らこそ、同期ではなく、非同期処理なのでしょうね。

 

主な非同期処理

非同期処理において、Web アクセスやファイル処理に関わるAPIを使用するものであれば、ほぼ十中八九非同期概念が必須です。

 

async / await

async awaitの概念は、奥が深いので、他のブログやドキュメントを参考にした方がいいと思います。

簡単に非同期処理を書くための方法としては、以下の2点のどちらかを使用することで可能です。

  • 関数定義によるasync宣言
  • 関数内にてラムダ式によるasync宣言

 

関数定義によるasync宣言

関数定義によるasync宣言のパターン以下

 

void型(戻り値なし)のasync / await

private async void AscyncMetohd()
{

    await ...
}

Task型のasync / await 

※Task型もreturnで戻り値を指定しなくてよい

private async Task AscyncMetohd()
{
    await ...
}

Task<T>型のasync / await 

private async Task<int> AscyncMetohd()
{

    int nCount = 5;
    await ...

    return nCount;
}

 

関数内にてラムダ式によるasync宣言

関数内にてラムダ式によるasync宣言のパターン以下

筆者は、ほぼこの形式で書きます(笑)

関数には、async宣言を入れずに、関数内にて、Taskによるラムダ式(=>)による書き方で非同期を実装します。

 

void AscyncMetohd()
{
    var task = Task.Run(async () =>

    {

        await ...
    });

}

 

余談

 async / awaitの知識だけではなく、非同期を扱うならばTaskの概念も必要になると思います。