想知道你们聪明的人是否可以帮助我解决一个正确的错误。
我正在并行上传 blob 块,这在针对实时存储运行时效果很好,但是针对开发存储我偶尔会收到错误“指定的 blob 已经存在”。奇怪/讽刺的是,如果 blob确实已经存在,那么我永远不会看到错误。
这是我的代码:
var container = _cloudBlobClient.GetContainerReference(containerName);
container.CreateIfNotExist();
CloudBlockBlob blob = container.GetBlockBlobReference(blobname);
// calc number of blocks. Add 1 for remainder
var blockCount = ((int)Math.Floor((double)(length / mainBlockSize))) + 1;
var blockIds = new List<string>();
Parallel.For(0, blockCount, j =>
{
int blockSize = mainBlockSize;
// if the last block then calculate the remaining block size
if (j == blockCount - 1)
blockSize = (int)length - (mainBlockSize * (blockCount - 1));
var bytes = new byte[blockSize];
string blockId = Convert.ToBase64String(Encoding.UTF8.GetBytes(j.ToString("00000")));
lock (_mutex)
{
// these operations need to co-exist so the correct block order is maintained
blockIds.Add(blockId);
stream.Read(bytes, 0, blockSize);
}
blob.PutBlock(blockId, new MemoryStream(bytes), null);
});
// commit the blob with the list of blocks
blob.PutBlockList(blockIds);
我试过设置
_cloudBlobClient.ParallelOperationThreadCount = 1;
正如这个线程所建议的那样UploadFile-CloudBlockBlob 的行为是什么?看看它是否会有所作为,但它仍然出错。
精氨酸!我第一次遇到“在现场工作但不在我的机器上的错误”!:)
我用 Fiddler 检查了所有的存储请求,Live 和 Dev 之间没有区别,所以我假设这是开发存储的错误。关于如何最好地处理这个问题的任何想法?
谢谢!