C#での非同期処理
- Alex Davies 著、神崎 謙一、株式会社トップスタジオ 訳
- 2013年03月 発行
- ISBN978-4-87311-604-4
- フォーマット ePub
- 原書: Async in C# 5.0
内容
本書は、C#5.0で新たに追加された非同期処理の機能、asyncについて解説する書籍です。既にC#をよく使っている開発者に向けて、複雑なコードを書くことなく非同期機能を実現できるasyncの機能を紹介します。既存のメソッドを非同期にする方法、タスクベースの非同期パターン(TAP)、非同期コードにおける例外処理、並列処理などをコンパクトな紙幅の中で解説しています。なお本書はEbook版のみの販売となります。
関連書籍
目次
はじめに
対象とする読者
本書の読み方
本書での表記
サンプルコードの使用について
お問合せ先
謝辞
1章 序
非同期プログラミング
非同期コードのどこが優れているのか
asyncとは何か
asyncの機能
asyncですべてが解決されるわけではない
2章 プログラムが非同期でなければいけない理由
デスクトップユーザインタフェースアプリケーション
たとえ話――カフェ
Webアプリケーションサーバのコード
もう1つのたとえ話――レストランの厨房
Silverlight、Windows Phone、Windows 8
並列コード
サンプルプログラム
3章 非同期コードを手作業で書く
.NETで使用される非同期パターン
最もシンプルな非同期パターン
Task概説
手動非同期処理の問題点
手動非同期コードを使ったサンプルプログラムの変換
4章 asyncメソッドを書く
faviconのサンプルをasyncに変換する
Taskとawait
asyncメソッドの戻り値型
async、メソッドのシグネチャ、インタフェース
asyncメソッドにおけるreturn文
asyncメソッドには波及性がある
async匿名デリゲートとラムダ式
5章 awaitが実際に行うこと
メソッドの休止と復帰
メソッドの状態
コンテキスト
awaitが使えない場所
catchブロックとfinallyブロック
lockブロック
LINQクエリ式
アンセーフコード
例外のキャプチャ
asyncメソッドは必要になるまでは同期だ
6章 タスクベースの非同期パターン
TAPが規定すること
計算集約型処理でTaskを使う
パペットTaskを作る
従来の非同期パターンとの連携
コールドTaskとホットTask
最優先の作業
7章 asyncコードのためのユーティリティ
一定時間遅延させる
Taskのコレクションを待つ
コレクションの中のどれか1つのTaskを待つ
オリジナルの連結子を作る
非同期処理をキャンセルする
非同期処理中に進行状況を返す
8章 どのスレッドがコードを実行しているのか?
最初のawait以前
非同期処理を行っているとき
SynchronizationContextの詳細
awaitとSynchronizationContext
async処理のライフサイクル
SynchronizationContextの使用を避ける
同期コードと連携する
9章 asyncコードにおける例外
Taskを返すasyncメソッドにおける例外
検出されない例外
void型のasyncメソッドにおける例外
撃ちっぱなし(Fire and Forget)
AggregateExceptionとWhenAll
例外を同期でスローする
asyncメソッドにおけるfinally
10章 asyncを使った並列処理
awaitとlock
アクター
C#でアクターを使う
タスク並列ライブラリのデータフロー
11章 asyncコードの単体テスト
asyncにおける単体テストの問題点
有効なasyncテストを手作業で書く
単体テストフレームワークのサポートを利用する
12章 ASP.NETアプリケーションにおけるasync
非同期Webサーバコードの利点
ASP.NET MVC 4でasyncを使う
ASP.NET MVCの古いバージョンでasyncを使う
ASP.NET Webフォームでasyncを使う
13章 WinRTアプリケーションにおけるasync
WinRTとは何か?
IAsyncActionとIAsyncOperation>T<
キャンセル
進行状況の報告
WinRTのコンポーネントに非同期メソッドを提供する
14章 asyncのコンパイラによる変換――その深層
スタブメソッド
ステートマシン構造体
MoveNextメソッド
オリジナルのコード
リターンを完了に変換する
メソッドの正しい場所に行く
awaitのためにメソッドを一時停止する
待機後に再開する
同期で完了する
例外をキャッチする
もっと複雑なコード
カスタムの待機可能な型を書く
デバッガと対話する
15章 asyncコードの性能
asyncのオーバーヘッドを計測する
時間のかかる処理におけるasync対ブロッキング
時間のかかる処理のasyncコードを最適化する
async対手動非同期コード
時間のかかる処理がない場合のasync対ブロッキング
時間のかかる処理がないasyncコードを最適化する
asyncの性能についてのまとめ