概要
async awaitを用いた非同期処理に関して、私にとって役に立ったサイトのまとめです。
今更(?)、二番煎じどころか三番煎じ(?)感はありますが。。。私なりに情報をラベ
リングして目的に応じた情報にジャンプできるようにまとめたつもりです。
想定読者
①これからC#の非同期処理を学ぶ人。
②非同期処理は理解しており、目的に応じた情報を探したい人
初学者向け
1.MS社:async および await を使用した非同期プログラミング
非同期処理の概念/使い方を知ることが、役に立つかと思います。
一番始めの導入として読む。説明と実装がセットになっているため、
取っ掛かりとして適切だと思います。
async および await を使用した非同期プログラミング
2.MS社:非同期プログラミング モデル -非同期メソッドでの動作-
非同期メソッドが「どんな順番で実行されるか」を図解している。
一度読んだ方が理解が早くなると思います。
非同期メソッドでの動作
3.Qiita:Taskを極めろ!async/await完全攻略
ざっくりとTaskについて理解したい人向け。
Qiitaの記事だと一番わかりやすかった。
Taskを極めろ!async/await完全攻略
4.An other world awaits you
岩永さんが非同期処理についてまとめたスライド
スレッドプール/UIスレッド/同期コンテキストの話など知った方が良い知識が纏まっている。
特に、41~45ページに「同期コンテキスト」って言葉は頭の片隅に置いた方が良いと思います。
普段は意識する必要ないけど、デットロックなど問題が起きたときに、向き合う羽目になる。
An other world awaits you
5.async/awaitと同時実行制御
4.のスライド読んで余力があれば。。。。。一読すると良いと思います。
awaitの内部動作と同期コンテキストの関連について触れています。
async/awaitと同時実行制御
リソース開放
TaskクラスはIDisposable()を継承していますが、Dispose()で破棄する必要はありません。
下記サイトの注釈に呼ぶ必要ないと記載されている。
Task.Dispose()
非同期処理の中断方法
下記を参考のこと。ポイントはキャンセルトークンを渡すこと。
タスクのキャンセル
非同期処理の例外キャッチ
イディオム
1.MSDNマガジン:非同期プログラミングのベスト プラクティス(@2013)
非同期プログラミングの指針と詳細な説明がある。
やや古いがすごく参考になる。
非同期プログラミングのベスト プラクティス
2.MS社の公式ページにあるイディオム
下記サイトの「重要な情報とアドバイス」を参照のこと。
1.MSDNマガジンのイディオム+αの重要な情報が記載されている。
重要な情報とアドバイス
3.Correcting Common Async Await Mistakes in .NET(NDC Conference@2019)
MS社エバンジェリストBrandon Minnickさんの講演
page21-27にBest Practisの記載あり
MSDNマガジン:非同期コードの単体テスト: テストを容易にする 3 つの解決策
下記記事に単体テスト方法と単体テストを容易にする方法が提示されている。
非同期コードの単体テスト: テストを容易にする 3 つの解決策
リファクタリング
MSDNマガジン:非同期プログラミング - 非同期への変換
同期処理から非同期処理に変換する手順が書かれています。
非同期プログラミング - 非同期への変換
ガイドライン
.NETで非同期ライブラリを正しく実装する
.NETで非同期ライブラリを正しく実装するためのガイドラインが記載されている。
.NETで非同期ライブラリを正しく実装する
おまけ
MSDNマガジン:スタートアップから非同期にする方法
async-awaitを使うと、呼び出し元も非同期になり、芋づる的に非同期関数が増えていく。
「はじめから非同期にするにはどうするべきか?」を書いた記事。
Windows フォームと WPFの既定の UI スタートアップ コードのリファクタリングを行い、
async/await のサポートを追加する一連の手順が記載されている。
サンプルコード(上手くリンクされなかったら、別タブでURLコピー貼付けしてください。)
http://download.microsoft.com/download/b/a/e/baea7711-903c-4536-92ff-cac9955eb848/code_sowul.async.1115.zip
async / awaitのしくみ
内部の仕組みに興味ある人向け
岩永さんのスライド