【发布时间】:2015-04-16 01:37:58
【问题描述】:
这是有问题的代码
public async static Task<MemoryStream> AsyncReadBlob(string identifier)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageString);
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer container = blobClient.GetContainerReference(containerName);
MemoryStream memstream = new MemoryStream();
CloudBlockBlob blockBlob = container.GetBlockBlobReference(identifier);
await blockBlob.DownloadToStreamAsync(memstream);
return memstream;
}
基本上,如果我替换,代码运行完全正常
await blockBlob.DownloadToStreamAsync(memstream)
与
blockblob.DownloadToStream(memstream)
或
blockblob.DownloadToStreamAsync(memstream).wait()
但是当我使它异步时,“下载到流”步骤永远不会完成。我也尝试过使用 DownloadToStreamBegin(),然后等待它完成,但它永远不会再次完成。
它是不是因为它是一个静态方法而不起作用?还是因为它的 memstream 正在从内存中取消引用或其他什么??
我使用的是 asp.net 4.5,所有编译正常,没有抛出解释器错误或异常。
任何帮助将不胜感激
【问题讨论】:
-
使用
await关键字意味着主线程将被释放以允许处理其他事情,函数的执行将在它完成之前不会继续。所以你应该在方法DownloadToStreamAsync上调用await!状态机会记住当前执行的位置,即await块,然后在异步方法完成后返回它。 -
我在 DownloadToStreamAsync 上使用 await ??
-
您应该尝试 3 个示例来说明您尝试执行相同功能的方式,而我所说的是为什么您应该使用
await,我只是想对这个主题提供更多的理解
标签: c# asynchronous azure-storage azure-blob-storage asp.net-4.5