[…]Async と Begin[…] .net 非同期 API の違いの質問を見つけましたが、この回答は少し混乱しました。
これらのパターンについて、Stephen 氏は次のように述べています。
ほとんどの *Async メソッド (対応する *Completed イベントを含む) は、イベント ベースの非同期パターンを使用しています。古い (しかし完全に有効な) Begin* と End* は、非同期プログラミング モデルと呼ばれるパターンです。
Socket クラスはこの規則の例外です。その *Async メソッドには対応するイベントがありません。基本的には、過剰なメモリ割り当てを回避するために行われる APM にすぎません。
少なくともソケットに関しては、* Async メソッドを使用する方が効率的です。しかし、その後、彼は Task Parallel Library について言及しました。
ただし、APM と EBAP はどちらも、Task Parallel Library に基づくより柔軟なアプローチに置き換えられています。TPL は APM を簡単にラップできるため、古いクラスは直接更新されない可能性があります。拡張メソッドは、古い APM メソッドに相当するタスクを提供するために使用されます。
MSDN でTPL と従来の .NET 非同期プログラミングを見つけました。TPLの基本、タスクの作成、キャンセル、継続などは知っていますが、これらをまだ理解できていません。
非同期プログラミング モデル (APM) とイベント ベースの非同期パターン (EAP) を比較した場合の利点は何ですか? TPL で APM を簡単にラップできるとは、APM と EAP の両方が TPL に置き換えられることを意味しますか?
そして最も重要なのは、ソケットプログラミングでどちらを使用する必要があるかです。
- APM?
- えっ?
- タスクによってラップされた APM または EAP?
- タスクで Socket クラスのブロッキング メソッドを使用して TPL を実行しますか?
- 他の?