async (C# リファレンス)

async 修飾子は、メソッド ラムダ式変更する、または 匿名メソッド が非同期であることを示します。このようなメソッドは非同期のメソッドと呼ばれます。

非同期のメソッドでは、呼び出し元のスレッドをブロックする場合には、実行に時間のかかる処理を行う便利な方法を提供します。非同期のメソッド呼び出し元は非同期のメソッドを待たずに作業を再開できます。

[!メモ]

async と await のキーワードは、Visual Studio 2012 で導入されました。そのバージョンのそのほかの新機能については、Visual Studio 2012 の新機能を参照してください。

プログラムする非同期の概要については Async および Await を使用した非同期プログラミング (C# および Visual Basic)を参照してください。

次の例では、の構造を非同期のメソッドを呼び出す非同期のイベント ハンドラー StartButton_Click、ExampleMethodAsync示します。メソッドの結果をダウンロードした Web サイトの長さです。コードは、Windows Presentation Foundation (WPF) ストアまたは Windows アプリケーションに適しています。

// In desktop apps that you create by using Visual Studio 2012, you must 
// add a reference and a using directive for System.Net.Http.
// In Windows Store apps, you must add using directives for System.Net.Http 
// and System.Threading.Tasks.

private async void StartButton_Click(object sender, RoutedEventArgs e)
{
    // ExampleMethodAsync returns a Task<int> and has an int result.
    // A value is assigned to intTask when ExampleMethodAsync reaches
    // an await.
    try
    {
        Task<int> intTask = ExampleMethodAsync();
        // You can do other work here that doesn't require the result from
        // ExampleMethodAsync. . . .
        // You can access the int result when ExampleMethodAsync completes.
        int intResult = await intTask;
    
        // Or you can combine the previous two steps:
        //int intResult = await ExampleMethodAsync();

        // Process the result (intResult). . . .
    }
    catch (Exception)
    {
        // Process the exception. . . .
    }
}

public async Task<int> ExampleMethodAsync()
{
    var httpClient = new HttpClient();

    // At the await expression, execution in this method is suspended, and
    // control returns to the caller of ExampleMethodAsync.
    // Variable exampleInt is assigned a value when GetStringAsync completes.
    int exampleInt = (await httpClient.GetStringAsync("https://msdn.microsoft.com")).Length;

    // You can break the previous line into several steps to clarify what happens:
    //Task<string> contentsTask = httpClient.GetStringAsync("https://msdn.microsoft.com");
    //string contents = await contentsTask;
    //int exampleInt = contents.Length; 

    // Continue with whatever processing is waiting for exampleInt. . . .

    // After the return statement, any method that's awaiting
    // ExampleMethodAsync can get the integer result.
    return exampleInt;
}
重要 : 重要

ように要素を使用する完全な WPF の例については、チュートリアル: Async と Await を使用した Web へのアクセス (C# および Visual Basic)を参照してください。チュートリアルをコードから 開発者コード サンプルダウンロードできます。

通常、async のキーワードで修飾されたメソッドには最低 待機します。 の 1 種類の式またはステートメントが含まれます。メソッドは、予期したタスクが完了するまで await の最初の式に達する、この時点で中断されるまで同期的に実行されます。一方、コントロールがメソッドの呼び出し元に返します。メソッドが await の式とステートメントが、同期的に実行されます。コンパイラの警告は await が含まれていないすべての非同期のメソッドにその状態がエラーを示す場合があるので、警告します。詳細については、「コンパイラの警告 (レベル 1) CS4014」を参照してください。

async のキーワードは、コンテキスト キーワードです。このメソッドは、ラムダ式、または匿名メソッドを変更するときにキーワードです。それ以外の場合は、識別子として解釈されます。

戻り値の型

非同期のメソッドは TaskTask<TResult>、または [void]の戻り値の型を持つことができます。メソッドは、このようなパラメーターを持つメソッドを呼び出すことが ref または t3c3bfhx(v=vs.110).md のパラメーターを宣言できません。

メソッドの 返します。 のステートメントが TResult 型のオペランドを指定すると Task<TResult> を、非同期メソッドの戻り値の型指定します。メソッドが完了すると、意味のある値が返されない Task を使用します。つまり、メソッドの呼び出しは Taskを返しますが、Task が完了すると、Task を待機する await の式は、無効にする評価されます。

void の戻り値の型が void の戻り値の型が必要なイベント ハンドラーを定義するために主に使用されます。無効返す非同期のメソッド呼び出し元は、を待機し、メソッドがスローする例外をキャッチできません。

使用例を含む詳細については、「非同期の戻り値の型 (C# および Visual Basic)」を参照してください。

参照

処理手順

チュートリアル: Async と Await を使用した Web へのアクセス (C# および Visual Basic)

関連項目

await (C# リファレンス)

AsyncStateMachineAttribute

概念

Async および Await を使用した非同期プログラミング (C# および Visual Basic)