3

次のシーケンスは正しいですか、それとも次の BeginAccept() への呼び出しは EndAccept が返された後にのみ発生する必要がありますか?

listener.BeginAccept(AcceptCallback, null);

private void AcceptCallback(IAsyncResult ar)
{
   listener.BeginAccept(AcceptCallback, null); //Is this ok ? Or should happen only after next line?
   socket = listener.EndAccept(ar);

}
4

1 に答える 1

2

Socket クラスのドキュメントの 2 つの部分に基づいて、安全だと思います。

ソケットで複数の非同期操作を実行する場合、それらは必ずしも開始された順序で完了するとは限りません。

このクラスのインスタンスはスレッド セーフです。

つまり、最初のコメントには、同時に複数の非同期操作を行うことが有効な非同期操作に関する注意事項が記載されていません。そして 2 番目のコメントは、.NET フレームワークのクラスに対する通常のスレッド保証よりもはるかに強力です。

于 2013-10-23T06:50:41.200 に答える