public async Task <long> Publish(IEnumerable <ReadOnlyMemory <byte> > messages) { Task writeTask; long seqNum; lock (sync) { if (disposed) { throw new PublisherException($"Cannot write to disposed {nameof(Publisher)}"); } var request = new WriteManyRequest { SequenceNumber = sequenceNumber }; request.Messages.AddRange(messages.Select(x => Google.Protobuf.ByteString.CopyFrom(x.Span))); writeTask = requestStream.WriteAsync(request); seqNum = sequenceNumber++; } await writeTask; return(seqNum); }
public void Write(WriteManyRequest request) { lock (sync) { if (disposed) { throw new TopicWriterException($"Cannot write to disposed {nameof(TopicWriter)}"); } var writeResult = topic.Write(request.Messages.Span); idMap.Add(new IdPair(request.SequenceNumber, writeResult.LastInsertedIndex)); } }