private static IPropagatorBlock <BulkOperation, byte[]> CreateBulkRequestBodyBlock(int targetSizeInBytes, bool omitTypeHeaders) { var transformOpts = new ExecutionDataflowBlockOptions { MaxDegreeOfParallelism = 1 }; var stream = new MemoryStream(); var writer = new BulkWriter(stream, omitTypeHeaders); var source = new BufferBlock <byte[]>(); var target = new ActionBlock <BulkOperation>(async op => { op.Write(writer); writer.Flush(); if (stream.Length >= targetSizeInBytes) { stream.Position = 0; await source.SendAsync(stream.ToArray()).ConfigureAwait(false); stream.SetLength(0); writer = new BulkWriter(stream, omitTypeHeaders); } }, transformOpts); target.Completion.ContinueWith(async t => { if (stream.Length > 0) { stream.Position = 0; await source.SendAsync(stream.ToArray()).ConfigureAwait(false); stream.SetLength(0); } source.Complete(); }); return(DataflowBlock.Encapsulate(target, source)); }
public override void Write(BulkWriter writer) => writer .Append(new { index = new Header(this) }) .Append(Doc);
public abstract void Write(BulkWriter writer);
public override void Write(BulkWriter writer) => writer .Append(new { update = new UpdateHeader(this) }) .Append(new DocPayload(this));
public override void Write(BulkWriter writer) => writer .Append(new { delete = new Header(this) });