以下序列是合法的还是只有在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);
}
答案 0 :(得分:2)
我认为这是安全的,基于Socket class的文档的两个部分:
如果在套接字上执行多个异步操作,则它们不一定按启动顺序完成。
和
此类的实例是线程安全的。
也就是说,第一条评论没有列出对的任何警告,哪些异步操作同时具有多个异步操作。第二条评论比.NET框架中的类通常的线程保证强得多。