.NET:可以在前一个EndAccept()完成之前调用BeginAccept()吗?

时间:2013-10-23 06:32:43

标签: .net c#-4.0

以下序列是合法的还是只有在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);

}

1 个答案:

答案 0 :(得分:2)

我认为这是安全的,基于Socket class的文档的两个部分:

  

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

  

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

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