internal static Task<Socket> AcceptSocketAsync(this TcpListener listener) { var tcs = new TaskCompletionSource<Socket>(); listener.BeginAcceptSocket(iasr => { try { tcs.SetResult(listener.EndAcceptSocket(iasr)); } catch (Exception e) { tcs.SetException(e); } }, null); return tcs.Task; }
internal static IObservable<Socket> AcceptSocketAsync(this TcpListener listener) { return new AsyncOperation<Socket>( (c, st) => listener.BeginAcceptSocket(c, st), iasr => listener.EndAcceptSocket(iasr)); }
/// <summary> /// Extends BeginAcceptSocket so that when a state object is not needed, null does not need to be passed. /// <example> /// tcplistener.BeginAcceptSocket(callback); /// </example> /// </summary> public static IAsyncResult BeginAcceptSocket(this TcpListener tcplistener, AsyncCallback callback) { if(tcplistener == null) throw new ArgumentNullException("tcplistener"); return tcplistener.BeginAcceptSocket(callback, null); }