2011-08-30 5 views
0

Socket.AcceptAsyncのMSDNドキュメントを読む「End」メソッドがあるかどうかはまだ完全にはっきりしていません。Socket.AcceptAsyncが必要とし、 'End'メソッド呼び出しがあります

BeginAccept()の場合は、呼び出しを完了し、IAsyncResultをパラメータとして受け取り、開発者がIAsyncResult.AsyncStateメソッドを介してSocketにアクセスできるようにするEndAccept()メソッドがあります。 EndAccept(またはその他のEndxxxメソッドのペア)を呼び出すと、CLRに割り当てられたいくつかのリソースがクリーンアップされ、非同期操作が実際に完了したかどうかを監視する機能も提供されます。

これはすべて、 AcceptAsyncの呼び出しに続いてEndメソッドを呼び出す必要がありますか - それともReceiveAsyncですか?または、EndメソッドがAsync内できちんとラップされているかどうか、おそらくTaskとContinueWith?したがって、なぜSocketAsyncEventArgsにSocket自体が含まれているのですか。

誰もが素晴らしいと知っていれば!どうもありがとう!

+0

MSDNには、関連する[SocketAsyncEventArgs](http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx)の詳細と豊富な例があります。それはあなたに何か助けになるだろうか? – mtijn

+0

こんにちは、ええ、それはAcceptAsyncの実際のMSDN記事よりもはるかに優れた情報源だとわかりました。それは私の質問に完全に答えなかった(実際にはおそらくそれに追加されました:-))。しかし、2つのコードとサンプルコードの間では、多くの助けになりました!ありがとう – jameschinnock

+0

私はちょっとした情報で私の答えを更新しました – jgauffin

答えて

1

いいえEndメソッドはありません。

SocketAsyncEventArgsCompletedイベントを処理する必要があります。また、ReceiveAsyncなどは直接完了することができます(したがって、イベントを引き起こさないことに注意してください)。

更新したがって

SocketAsyncEventArgsは、ソケット自体が含まれている理由。

同じクラスのすべてのクライアントのIO操作を処理できる必要があるからです。クライアント固有の情報を格納するために使用できるUserTokenプロパティもあります。

それとも、タスクとContinueWith

号としてきちんと非同期以内に包まれ、その終了方法、新しい非同期モデルは、よりその「本当の」モデル(IO完了ポート)のようなものされていますWindowsによって提供されます。非同期プログラミングを容易にするために、構造の開始/終了の種類が導入されました。 XxxxAsyncモデルは、それを必要とするアプリケーションのパフォーマンスをさらに向上させるために作成されました(実際にはいくつかメリットがありますが、それは本当に重要です)。

+0

こんにちはjgauffin、追加情報ありがとうございました。非常に感謝しています!私は、Mark Russinovichの第5章から、I/O完了ポートについての十分な読書をするようにしています。 – jameschinnock

関連する問題