private PipeReader CreateReader(DataItem[] data) { var outputData = data .Select <DataItem, object>( z => { if (z.MsgKind.EndsWith("response")) { return(new OutgoingResponse(z.MsgId, z.Arg, new Request(z.MsgId, z.MsgType, JValue.CreateNull()))); } if (z.MsgKind.EndsWith("request")) { return(new OutgoingRequest { Id = z.MsgId, Method = z.MsgType, Params = z.Arg }); } if (z.MsgKind.EndsWith("notification")) { return(new OutgoingNotification { Method = z.MsgType, Params = z.Arg }); } throw new NotSupportedException("unknown message kind " + z.MsgKind); } ); var pipeIn = new Pipe(); var serializer = new JsonRpcSerializer(); Task.Run( async() => { foreach (var item in outputData) { var content = serializer.SerializeObject(item); var contentBytes = Encoding.UTF8.GetBytes(content).AsMemory(); await pipeIn.Writer.WriteAsync( Encoding.UTF8.GetBytes($"Content-Length: {contentBytes.Length}\r\n\r\n") ); await pipeIn.Writer.WriteAsync(contentBytes); await pipeIn.Writer.FlushAsync(); } await pipeIn.Writer.CompleteAsync(); } ); return(pipeIn.Reader); }