3

下面的顺序是合法的还是应该只在 EndAccept 返回之后才调用下一个 BeginAccept() ?

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 类文档的两个部分:

如果在一个套接字上执行多个异步操作,它们不一定按照它们启动的顺序完成。

此类的实例是线程安全的。

也就是说,第一条评论没有列出任何关于哪些异步操作同时具有多个有效的警告。第二条注释比 .NET 框架中的类的通常线程保证要强得多。

于 2013-10-23T06:50:41.200 回答