使用异步任务Azure关闭内存流

时间:2018-03-13 17:00:52

标签: c# asp.net-web-api2 task-parallel-library

我有一个Web Api功能,它将base64图像上传到Azure,我使用异步任务方法来做到这一点。问题是代码执行会被await字卡住,并且永远不会移动到关闭流,即使在上传照片后我也没有收到任何错误。

    public async Task<bool> UploadImage(string filename, MemoryStream uploadStream)
    {
            var blobClient = ConnectToAzure();
            CloudBlobContainer imagContainer = blobClient.GetContainerReference(Container);
            CloudBlockBlob blockBlob = imagContainer.GetBlockBlobReference(filename);
            blockBlob.Properties.ContentType = "image/jpg";                                                
            await blockBlob.UploadFromStreamAsync(uploadStream);
            uploadStream.Close();

            return true;
    }

2 个答案:

答案 0 :(得分:1)

如果您在MVC / WebAPI操作方法中调用UploadImage(...),则该操作也应该是异步的

答案 1 :(得分:-1)

您的uploadStream对象的生命周期可能在调用await blockBlob.UploadFromStreamAsync(uploadStream)方法后立即结束,导致您的UploadImage()方法比预期更早退出/结束。您可以尝试将代码移动到UploadImage()方法的父作用域吗?