BlobSync.AzureOps.WriteBytes C# (CSharp) Method

WriteBytes() private method

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
return 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;
        }