2022年02月05日
川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!total 646 count

asyncキーワード/await演算子: さあ、非同期の迷宮に踏み込もう

Written By: 川俣 晶連絡先

この章のテーマ §

 asyncキーワード/await演算子の使い方を学びます。これらは非同期メソッドを実現するために存在します。

前提知識 §

Console.WriteLineメソッド, 文字列の基礎, 変数の基礎, int型, メソッドの基礎., ジェネリックの基礎

解説 §

 世の中には、非同期メソッドというものがあります。これは、「処理が終了する前に戻ってくる。結果を受け取るには追加のアクションが必要」というものです。はっきり言って面倒くさいのですが、バッテリ節約、リソース節約の効能があるので、利用を求められるケースがあります。

 そこで、簡単に非同期メソッドを利用するために、C#にはasyncキーワード/await演算子が用意されています。

 Task型あるいはTask<T>型を返す非同期メソッドを呼び出すときは、先頭にawait演算子を付けると処理が終了するまで実行を待っていてくれます。そのため、普通のメソッド呼び出しのように使えます。

 await演算子が含まれるメソッドも非同期メソッドにしなければなりません。そのためには、メソッドの宣言にasyncキーワードを付け、戻り値の型をTaskまたはTask<T>に変更します。Tは返したい値の型です。voidの場合はTaskになります。

罠の数々 §

  • awaitで待っている間に他のコードが動作することがある。そのことで混乱が起きないように配慮してコードを書こう
  • 非同期メソッドの戻り値の型はvoidにすることもできる。この場合は、【終了を待つ必要がないメソッド】となり、呼び出しにawait演算子は必要ないが、実行の終了タイミングを知る方法はない
  • TaskはSystem.Threading名前空間にあるクラスである。主に並列処理を行うために使用されるクラスである
  • 非同期メソッドとマルチスレッドなどの並列処理は違うものである。非同期メソッドを呼び出すと即座に何か別の処理が並列で実行されるわけではない。待ち時間が発生したときに、他のタスクが動作するかもしれないだけである

参考リンク §

async (C# リファレンス)

await 演算子 (C# リファレンス)

サンプルソース: kw_async §

var r = await sub(123,456);

Console.WriteLine($"計算結果: {r}");

async Task<int> sub(int x,int y)

{

    await Console.Out.WriteLineAsync("計算中...");

    return (x + y) / 2;

}

実行結果 §

計算中...

計算結果: 289

リポジトリ §

https://github.com/autumn009/CSharpPrimer2

練習問題 §

 以下のプログラムの実行結果を予測してみよう。なお、 await Task.Delay(1000);は1秒待機するコードである。

SubAsync();

async void SubAsync()

{

    // 1秒待つ

    await Task.Delay(1000);

    Console.WriteLine("Hello!");

}

  1. 何も出力しない
  2. H
  3. Hello!
  4. コンパイルエラー
  5. 実行時例外

[[解答]]

Facebook

キーワード【 川俣晶の縁側ソフトウェアnew_C#入門・全キーワード明快解説!
【new_C#入門・全キーワード明快解説!】の次のコンテンツ
2022年
02月
06日
コンストラクタとファイナライザとデストラクタ: 誕生、そして消滅のお知らせ
3days 2 count
total 757 count
【new_C#入門・全キーワード明快解説!】の前のコンテンツ
2022年
02月
04日
拡張メソッド: 拡張できない型にメソッドを追加しちゃおう
3days 3 count
total 629 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

http://mag.autumn.org/tb.aspx/20220205100103
サイトの表紙【new_C#入門・全キーワード明快解説!】の表紙【new_C#入門・全キーワード明快解説!】のコンテンツ全リスト 【new_C#入門・全キーワード明快解説!】の入手全リスト 【new_C#入門・全キーワード明快解説!】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.