「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
非同期処理の実装方式について。
詳細 †
- 一般的に、非同期処理と言うと、
同期処理(オンライン)との対比になり、
同期処理(オンライン)オンラインとの待ち合わせをする。
- 同期処理(オンライン)と待ち合わせをしない場合は、
同期処理(オンライン)から、
- 別途スレッドを生成して処理させたり、
- キューにキューイングして、バッチで処理させたり、
することになる。
非同期処理の実装史 †
1. Thread、ThreadPool? †
従来の(プリミティブな)、マルチスレッド・プログラミング。
- スレッドの並列実行はOSが裏で無意識にしてくれていた。
- タイムスライスで細切れ/ラウンドロビンで論理的に並列実行。
- CPUのコア数に応じて、物理的に並列実行。
- しかし、以下の処理は意識的に実装する必要があった。
- 非同期処理をスレッド関数として分離して実装する。
- スレッド関数を作成したワーカースレッドに渡す。
- スレッド関数の結果をメインスレッドで待ち合わせる。
2. APM (Beginメソッド, Endメソッド) †
Beginメソッドに Endメソッドのdelegateを渡す。同期方法はクラスに依る。
- 代表的なメソッド
- Streamクラスの、BeginRead? および EndRead? メソッド
- WebRequest?クラスの、BeginGetResponse? および EndGetResponse? メソッド
前述のAPMと同様に、Invokeメソッドにdelegateを渡す。同期方法はウィンドウ・メッセージ。
async/awaitで、同期呼び出し的に非同期処理を記述可能になった。同期方法は同期コンテキストに依存する。
Observer パターンを実装するフレームワークで、イベントや非同期処理をLINQっぽく扱える。
参考 †
Tags: :プログラミング, :その他、開発の色々, :.NET開発