blob을 비동기 적으로 업로드하는 것과 관련하여 혼란 스럽 습니다만 여기에서 답변을 찾으십시오.EndUploadFromStream을 (를) 혼동합니다.
먼저 내 코드에서 봐 주시기 바랍니다,
나는 푸른 블랍에 mutil 파일을 업로드해야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;
}
}
는, 파일의 수는 10-50,000 될 수있다, 각 파일은 10킬로바이트-50킬로바이트에 관한 것입니다. 코드 스 니펫이 현재 잘 작동합니다. 그러나 콜백에서 EndUploadFromStream을 호출하면 2,000 개가 넘는 파일을 업로드 할 때 항상 예외가 발생합니다. 나는 업로드 메서드에서 EndUploadFromStream을 제거하고 콜백 (OnUploadCompleted 메서드)에서 EndUploadFromStream을 호출하면 예외가 발생합니다. 아래 예외 메시지 :
없음
가 전송 연결에서 데이터를 읽을 수 : 연결이 종료하고, 스택 트레이스 :. Microsoft.WindowsAzure.StorageClient.Tasks.Task`1.get_Result (AT)을 마이크로 소프트. WindowsAzure.StorageClient.CloudBlob.EndUploadFromStream (IAsyncResult asyncResult)
나는 왜 그런 일이 일어날 지 모르겠다.
감사합니다.