internal Task <SocketReceiveMessageFromResult> ReceiveMessageFromAsync(ArraySegment <byte> buffer, SocketFlags socketFlags, EndPoint remoteEndPoint) { var tcs = new StateTaskCompletionSource <SocketFlags, EndPoint, SocketReceiveMessageFromResult>(this) { _field1 = socketFlags, _field2 = remoteEndPoint }; BeginReceiveMessageFrom(buffer.Array, buffer.Offset, buffer.Count, socketFlags, ref tcs._field2, iar => { var innerTcs = (StateTaskCompletionSource <SocketFlags, EndPoint, SocketReceiveMessageFromResult>)iar.AsyncState; try { IPPacketInformation ipPacketInformation; int receivedBytes = ((Socket)innerTcs.Task.AsyncState).EndReceiveMessageFrom(iar, ref innerTcs._field1, ref innerTcs._field2, out ipPacketInformation); innerTcs.TrySetResult(new SocketReceiveMessageFromResult { ReceivedBytes = receivedBytes, RemoteEndPoint = innerTcs._field2, SocketFlags = innerTcs._field1, PacketInformation = ipPacketInformation }); } catch (Exception e) { innerTcs.TrySetException(e); } }, tcs); return(tcs.Task); }
public static Task <SocketReceiveFromResult> ReceiveFromAsync( this Socket socket, ArraySegment <byte> buffer, SocketFlags socketFlags, EndPoint remoteEndPoint) { var tcs = new StateTaskCompletionSource <EndPoint, SocketReceiveFromResult>(socket) { _field1 = remoteEndPoint }; socket.BeginReceiveFrom(buffer.Array, buffer.Offset, buffer.Count, socketFlags, ref tcs._field1, iar => { var innerTcs = (StateTaskCompletionSource <EndPoint, SocketReceiveFromResult>)iar.AsyncState; try { int receivedBytes = ((Socket)innerTcs.Task.AsyncState).EndReceiveFrom(iar, ref innerTcs._field1); innerTcs.TrySetResult(new SocketReceiveFromResult { ReceivedBytes = receivedBytes, RemoteEndPoint = innerTcs._field1 }); } catch (Exception e) { innerTcs.TrySetException(e); } }, tcs); return(tcs.Task); }