public Task <long> WriteBlockAsync(IAvroWriterBlock <T> block)
        {
            if (block == null)
            {
                throw new ArgumentNullException("block");
            }

            var taskSource = new TaskCompletionSource <long>();

            block.Flush();

            long result = 0;

            lock (this.locker)
            {
                if (!this.isHeaderWritten)
                {
                    // This is never used.
                    result = this.WriteHeader();
                }

                if (block.ObjectCount != 0)
                {
                    // Replace this with a MemoryStream, as we will be limited to the size of an Azure Blob Block
                    using (var stream = new MemoryStream())
                    {
                        using (var encoder = new BinaryEncoder(stream, true))
                        {
                            encoder.Encode(block.ObjectCount);
                            encoder.Encode(block.Content);
                            encoder.EncodeFixed(this.header.SyncMarker);
                            stream.Seek(0, SeekOrigin.Begin);
                            this.WriteStreamToBlobAsync(stream);
                        }
                    }
                }
            }

            taskSource.SetResult(result);
            return(taskSource.Task);
        }