我很困惑與異步上傳blob的問題,希望在這裏找到答案。混淆約EndUploadFromStream
請看看我的代碼段第一,
public void UploadMultipleBlobs(List<string> filelocations, string containerName, AsyncCallback callback = null, string path = null)
{
try
{
Parallel.ForEach(filelocations, fileLocation =>
{
//File to Stream
MemoryStream str = new MemoryStream();
byte[] file = File.ReadAllBytes(fileLocation);
str.Write(file, 0, file.Length);
str.Seek(0, SeekOrigin.Begin);
//Operations
if (callback == null)
callback = new AsyncCallback(OnUploadCompleted);
BlobRequestOptions blobRequestOptions = new BlobRequestOptions();
blobRequestOptions.Timeout = new TimeSpan(1, 0, 0);
blobRequestOptions.RetryPolicy = retry;
CloudBlob currentBlob = container.GetBlobReference(blobName);
var result = currentBlob.BeginUploadFromStream(str, blobRequestOptions, callback, new Object[] { currentBlob, str });
currentBlob.EndUploadFromStream(result);
});
}
catch
{
throw;
}
}
private void OnUploadCompleted(IAsyncResult result)
{
try
{
// Get array passed to callback
Object[] states = (Object[])result.AsyncState;
var blob = (CloudBlob)states[0];
var stream = (MemoryStream)states[1];
// End the operation
//blob.EndUploadFromStream(result);
// Close the stream
stream.Close();
}
catch
{
throw;
}
}
我需要牆身文件上傳到Azure的BLOB,文件的數量可能是10-50,000,每個文件約10KB-50KB。目前的代碼片段對我來說工作正常。但是,如果我在回調中調用EndUploadFromStream,則上傳超過2,000個文件時總是會引發異常。我的意思是如果我在上傳方法中刪除EndUploadFromStream並在回調(OnUploadCompleted方法)中調用EndUploadFromStream,則會發生異常。如下面異常消息:在微軟在Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result()
:
無法讀取從傳輸連接數據:連接被關閉,堆棧跟蹤。 WindowsAzure.StorageClient.CloudBlob.EndUploadFromStream(IAsyncResult asyncResult)
我不知道它爲什麼發生......希望得到了你們的答案。
謝謝。