public void Dispose() { if (Disposed) { return; } Disposed = true; SendResult?.TrySetCanceled(); DataStreamResponse?.Dispose(); DataStream?.Dispose(); ReceiveWaiter.Set(); DataStreamResponse = null; DataStream = null; }
public async ReusableTask <int> SendAsync(ByteBuffer buffer, int offset, int count) { SendResult = new TaskCompletionSource <object> (); List <RequestMessage> bundle = DecodeMessages(buffer, offset, count); if (bundle.Count > 0) { RequestMessages.AddRange(bundle); // The RequestMessages are always sequential RequestMessage start = bundle[0]; RequestMessage end = bundle[bundle.Count - 1]; CreateWebRequests(start, end); } else { return(count); } ReceiveWaiter.Set(); await SendResult.Task; return(count); }