BlobSync.AzureOps.WriteBytes C# (CSharp) 메소드

WriteBytes() 개인적인 메소드

Yes, copying the byte array to here. But given we'll not have many of these tasks going to parallel and each byte array is AT MOST 4M, I think I can live with the memory overhead.
private WriteBytes ( long offset, int bytesRead, byte bytesToRead, Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob blob, ConcurrentBag uploadedBlockList, bool testMode ) : System.Threading.Tasks.Task
offset long
bytesRead int
bytesToRead byte
blob Microsoft.WindowsAzure.Storage.Blob.CloudBlockBlob
uploadedBlockList ConcurrentBag
testMode bool
리턴 System.Threading.Tasks.Task
        private Task WriteBytes(long offset, int bytesRead, byte[] bytesToRead, CloudBlockBlob blob, ConcurrentBag<UploadedBlock> uploadedBlockList, bool testMode)
        {
            var t = Task.Factory.StartNew(() =>
                {
                    var sig = CommonOps.GenerateBlockSig(bytesToRead, offset, (int)bytesRead, 0);
                    var blockId = Convert.ToBase64String(sig.MD5Signature);

                    bool isDupe = false;
                    lock (parallelLock)
                    {

                        isDupe = uploadedBlockList.Any(ub => ub.BlockId == blockId);

                        // store the block id that is associated with this byte range.
                        uploadedBlockList.Add(new UploadedBlock()
                        {
                            BlockId = blockId,
                            Offset = offset,
                            Sig = sig,
                            Size = bytesRead,
                            IsNew = true,
                            IsDuplicate = isDupe
                        });

                    }

                    if (!testMode)
                    {
                        if (!isDupe)
                        {
                            // yes, putting into memory stream is probably a waste here.
                            using (var ms = new MemoryStream(bytesToRead))
                            {
                                var options = new BlobRequestOptions() { ServerTimeout = new TimeSpan(0, 90, 0) };
                                blob.PutBlock(blockId, ms, null, null, options);

                            }
                        }
                    }
              });

            return t;
        }