UploadFromStreamAsync取消令牌不工作



预期行为:

运行后在任务管理器中查看我的互联网使用情况,应该会看到上传大约5秒的峰值,然后回落到正常水平。

结果:

上传速度峰值持续更长的时间(接近一分钟或更长时间,表示上传了完整的文件)

尝试:

  • 多次取消(如1秒、10秒等)
  • 使用
  • 上传后立即取消令牌
  • UploadFromByteArrayAsync()代替UploadFromStreamAsync()使用
  • BeginUploadFromStream() with EndUploadFromStream()

虽然我可以很容易地使用CancellationToken取消下载,但无论我做什么,我都无法取消这个上传。而且,奇怪的是,在网上搜索,我找不到任何其他人在取消上传时遇到问题的实例。

_connectionString = "xxx";                
if (_connectionString != "")
{
_storageAccount = CloudStorageAccount.Parse(_connectionString);
_blobClient = _storageAccount.CreateCloudBlobClient();
}
string ulContainerName = "speedtest";
string ulBlobName = "uploadTestFile" + DateTime.UtcNow.ToLongTimeString();
CloudBlobContainer container = _blobClient.GetContainerReference(ulContainerName);
CloudBlockBlob ulBlockBlob = container.GetBlockBlobReference(ulBlobName);
CreateDummyDataAsync(_fileUploadSizeMB);
byte[] byteArray = System.IO.File.ReadAllBytes(_filePath + "dummy_upload");
ulBlockBlob.UploadFromStreamAsync(new MemoryStream(byteArray), _ulCancellationTokenSource.Token);
_ulCancellationTokenSource.CancelAfter(5000); 

对于在这种情况下最终无法获得cancellationToken工作的任何人…我最终使用的变通方法是

BlobRequestOptions timeoutRequestOptions = new BlobRequestOptions()
{
// Allot 10 seconds for this API call, including retries
MaximumExecutionTime = TimeSpan.FromSeconds(10)
};

然后在方法参数中包含timeoutRequestOptions:

ulBlockBlob.UploadFromStreamAsync(new MemoryStream(byteArray), new AccessCondition(),
timeoutRequestOptions,
new OperationContext(),
new progressHandler(), cancellationToken.Token);

这将强制API调用在一定时间后超时。

相关内容

  • 没有找到相关文章