コード例 #1
0
        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));
        }
コード例 #2
0
 public override void Write(BulkWriter writer) => writer
 .Append(new { index = new Header(this) })
 .Append(Doc);
コード例 #3
0
 public abstract void Write(BulkWriter writer);
コード例 #4
0
 public override void Write(BulkWriter writer) => writer
 .Append(new { update = new UpdateHeader(this) })
 .Append(new DocPayload(this));
コード例 #5
0
 public override void Write(BulkWriter writer) => writer
 .Append(new { delete = new Header(this) });