Beispiel #1
0
        public static Task <ReceiveFromOutput> ReceiveFromAsync(this Socket socket, byte[] buffer, int offset, int size,
                                                                SocketFlags socketFlags, EndPoint remoteEp)
        {
            var input = new ReceiveFromInput(socket, remoteEp);
            var tcs   = new TaskCompletionSource <ReceiveFromOutput>(input);

            socket.BeginReceiveFrom(buffer, offset, size, socketFlags, ref remoteEp, ar =>
            {
                var t       = (TaskCompletionSource <ReceiveFromOutput>)ar.AsyncState;
                var input2  = (ReceiveFromInput)t.Task.AsyncState;
                Socket s    = input2.Socket;
                EndPoint ep = input2.RemoteEp;
                try
                {
                    int recv = s.EndReceiveFrom(ar, ref ep);

                    var output = new ReceiveFromOutput(recv, ep);
                    t.TrySetResult(output);
                }
                catch (Exception ex)
                {
                    t.TrySetException(ex);
                }
            }, tcs);
            return(tcs.Task);
        }
        public static Task<ReceiveFromOutput> ReceiveFromAsync(this Socket socket, byte[] buffer, int offset, int size,
            SocketFlags socketFlags, EndPoint remoteEp)
        {
            var input = new ReceiveFromInput(socket, remoteEp);
            var tcs = new TaskCompletionSource<ReceiveFromOutput>(input);

            socket.BeginReceiveFrom(buffer, offset, size, socketFlags, ref remoteEp, ar =>
            {
                var t = (TaskCompletionSource<ReceiveFromOutput>)ar.AsyncState;
                var input2 = (ReceiveFromInput)t.Task.AsyncState;
                Socket s = input2.Socket;
                EndPoint ep = input2.RemoteEp;
                try
                {
                    int recv = s.EndReceiveFrom(ar, ref ep);

                    var output = new ReceiveFromOutput(recv, ep);
                    t.TrySetResult(output);
                }
                catch (Exception ex)
                {
                    t.TrySetException(ex);
                }
            }, tcs);
            return tcs.Task;
        }