System.Threading.Tasks.TaskCompletionSource.TrySetResult(NetDataBufferReader)

Here are the examples of the csharp api System.Threading.Tasks.TaskCompletionSource.TrySetResult(NetDataBufferReader) taken from open source projects. By voting up you can indicate which examples are most useful and appropriate.

1 Examples 7

19 Source : SessionRequest.cs
with MIT License
from zestylife

public async Task OnReceive(
            PacketProperty packetProperty,
            DeliveryMethod deliveryMethod,
            NetDataReader reader,
            Func<ISession, NetDataReader, NetDataWriter, Task> onRequestReceive)
        {
            var requestType = (RequestType)reader.ReadByte();
            int requestId = reader.ReadInt32();

            _statistic.IncreaseResponseRpc(requestId);

            switch (requestType)
            {
                case RequestType.Notification:
                    {
                        var writer = NetPool.DataWriterPool.Alloc();
                        try
                        {
                            await onRequestReceive(_session, reader, writer);
                        }
                        finally
                        {
                            NetPool.DataWriterPool.Free(writer);
                        }
                    }
                    break;
                case RequestType.Request:
                    {
                        var writer = NetPool.DataWriterPool.Alloc();
                        try
                        {
                            var prePos = writer.Length;

                            writer.Write((byte)RequestType.ReplyWithResult);
                            writer.Write(requestId);

                            try
                            {
                                await onRequestReceive(_session, reader, writer);
                            }
                            catch (Exception ex)
                            {
                                writer.Length = prePos;
                                writer.Write((byte)RequestType.ReplyWithException);
                                writer.Write(requestId);
                                writer.Write(ex.ToString());
                            }

                            NetPacket packet = NetPool.PacketPool.Alloc(packetProperty, writer);
                            packet.DeliveryMethod = deliveryMethod;

                            _session.SendRawAsync(packet, packet.DeliveryMethod);
                        }
                        finally
                        {
                            NetPool.DataWriterPool.Free(writer);
                        }
                    }
                    break;
                case RequestType.ReplyWithResult:
                    {
                        TaskCompletionSource<NetDataBufferReader> getTcs;
                        if (_responseWaitingItems.TryRemove(requestId, out getTcs) == false)
                            return;

                        NetDataBufferReader remainReader = new NetDataBufferReader(reader);
                        getTcs.TrySetResult(remainReader);
                    }
                    break;
                case RequestType.ReplyWithException:
                    {
                        TaskCompletionSource<NetDataBufferReader> getTcs;
                        if (_responseWaitingItems.TryRemove(requestId, out getTcs) == false)
                            return;

                        getTcs.TrySetException(new Exception(reader.ReadString()));
                    }
                    break;
            }
        }