LoginSignup
22
27

More than 1 year has passed since last update.

【C#】async awaitを用いた非同期処理-役立つサイトまとめ-

Last updated at Posted at 2021-04-04

概要

async awaitを用いた非同期処理に関するまとめ。
二番煎じ(?)感はありますが、目的に応じた情報にジャンプできるようにまとめた(つもりです)。

目次

想定読者

①これからC#の非同期処理を学ぶ人。
②非同期処理は理解しており、目的に応じた情報を探したい人

個人的にポイントだと思うこと

①async awaitは[処理を非同期に行う仕組み]ではなく、「非同期処理を待つための仕組み」である。
②async awaitは簡単に事故を起こします。「ベストプラクティス」を覚えましょう。


非同期処理の知識がない人向け

1.async および await を使用した非同期プログラミング

「非同期処理」の概念は知らない人はこちらから!
MS社:async および await を使用した非同期プログラミング

2.非同期プログラミング モデル -非同期メソッドでの動作-

非同期メソッドが「どんな順番で実行されるか」を図解している。図を見ながらステップ実行すると理解が早くなると思います。
MS社:非同期メソッドでの動作

3.[Unite Tokyo2018]さては非同期だなオメー!async awaitを完全に理解しよう

ゲームエンジンUnityの講演。async awaitの仕組みをわかりやすく解説してます。
C#言語共通部分は25分ぐらいまで、そこまで観ればOKです。
youtube:さては非同期だなオメー!async/await完全に理解しよう

4.An other world awaits you

スレッドプール/UIスレッド/同期コンテキストの話がコンパクトに纏まっている。
特に、41~45ページに「同期コンテキスト」って言葉は頭の片隅に置いた方が良い。
普段は意識する必要ないけど、デットロックなど問題が起きたときに向き合う羽目になる。
An other world awaits you

5.async/awaitと同時実行制御

4.のスライド知識を前提に、awaitの内部動作と同期コンテキストの関連について解説してます。
1~4を見た上で余力あれば、ぜひ!!
async/awaitと同時実行制御


非同期処理の知識がある人向け

リソース開放について

TaskクラスはIDisposable()を継承していますが、Dispose()で破棄する必要はありません。
下記サイトの注釈に「呼ぶ必要ない」と記載されている。
Task.Dispose()

非同期処理の中断方法

ポイントはキャンセルトークンを渡すこと。
タスクのキャンセル

非同期処理の例外キャッチ

async/awaitで例外処理をするには?

イディオム

1.非同期プログラミングのベスト プラクティス@2013

非同期プログラミングの指針と詳細な説明がある。やや古いがすごく参考になる。
MSDNマガジン:非同期プログラミングのベスト プラクティス

2.MS社の公式ページにあるイディオム

下記サイトの「重要な情報とアドバイス」を参照のこと。
1.MSDNマガジンのイディオム+αの重要な情報が記載されている。
重要な情報とアドバイス

3.Correcting Common Async Await Mistakes in .NET@2019

MS社エバンジェリストBrandon Minnickさんの講演(NDC Conference@2019)
page21-27にBest Practisの記載あり

SlideShare
講演動画

単体テスト

下記記事に単体テスト方法と単体テストを容易にする方法が提示されている。
MSDNマガジン:非同期コードの単体テスト: テストを容易にする 3 つの解決策

リファクタリングの指針

非同期プログラミング - 非同期への変換

同期処理から非同期処理に変換する手順が書かれています。
MSDNマガジン:非同期プログラミング - 非同期への変換

スタートアップから非同期にする方法

async-awaitを使うと、呼び出し元も非同期になり、芋づる的に非同期関数が増えていく。
「はじめから非同期にするにはどうするべきか?」を書いた記事。
Windows フォームと WPFの既定の UI スタートアップ コードのリファクタリングを行い、
async/await のサポートを追加する一連の手順が記載されている。

MSDNマガジン:スタートアップから非同期にする方法

サンプルコード(上手くリンクされなかったら、別タブでURLコピー貼付けしてください。)
http://download.microsoft.com/download/b/a/e/baea7711-903c-4536-92ff-cac9955eb848/code_sowul.async.1115.zip

async/awaitのしくみ

内部の仕組みに興味ある人向け

わかりやすいと思った順

1.C#のasync/awaitの内部挙動を理解する

async awaitがステートマシン内部的に構築することをわかりやすく説明しているQiita記事。
UIスレッドなどでTask.Wait()を呼び、ブロッキングすることでデットロックが起こる
仕組みをわかりやすく説明している。
https://qiita.com/mrngsht/items/7d280c9f161f6d9855e2

2 async awaitの仕組みスライド

岩永さんのページ27からページ41でasync awaitの内部処理を説明している。
岩永さんのスライド

3  awaitによる一時停止と再生

さらに深くawaitの仕組みを深堀りしたい人用。
MS社が出している内部処理に関する記事。正直わかりづらい。
MSDNマガジン:awaitによる一時停止と再生

非同期ライブラリの実装ガイドライン

.NETで非同期ライブラリを正しく実装する

.NETで非同期ライブラリを正しく実装するためのガイドラインが記載されている。
.NETで非同期ライブラリを正しく実装する

22
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
27