【问题标题】:Azure Storage Blob DownloadToStreamAsync WPF ThreadingAzure 存储 Blob DownloadToStreamAsync WPF 线程
【发布时间】:2014-01-17 22:09:17
【问题描述】:

我正在尝试从 Azure Blob 存储下载多个文件,用于 WPF 中的更新程序应用程序。我正在使用 Storage Client 3.0 版并尝试使用 Async 方法。我想下载文件并跟踪每个文件的进度,但是,DownloadToStreamAsync 方法没有 IProgress 重载。另一个问题是文件不断下载(我知道这一点是因为我正在观察临时目录中的文件增长),但应用程序在开始下载后立即完成。我是 .NET 中多线程的菜鸟,因此将不胜感激。这是我的代码。

public async void Download()
{ 
    // Save blob contents to a file.
    using (FileStream fileStream = System.IO.File.OpenWrite(TempPath))
    {
        CloudBlockBlob blockBlob = Container.GetBlockBlobReference(BlobReference);    
        await blockBlob.DownloadToStreamAsync(fileStream);
    }
}

public void BeginDownload()
{
    Task task = new Task(Download);
    task.Start();
    task.Wait();
}

【问题讨论】:

    标签: c# multithreading .net-4.5 async-await azure-storage


    【解决方案1】:

    您不应该使用new Task() 创建任务 你应该从 Download 方法中得到一个任务:

    public async Task DownloadAsync()
    { 
        // Save blob contents to a file.
        using (FileStream fileStream = System.IO.File.OpenWrite(TempPath))
        {
            CloudBlockBlob blockBlob = Container.GetBlockBlobReference(BlobReference);    
            await blockBlob.DownloadToStreamAsync(fileStream);
        }
    }
    public async Task BeginDownloadAsync()
    {
        await DownloadAsync();
    }
    

    当您调用async void 方法时,您没有等待任务,因此您无法在操作完成时收到通知。这就是为什么它在操作完成之前“完成”。 BeginDownload 方法并没有真正等待它完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-10
      • 1970-01-01
      • 2012-03-02
      • 2016-03-04
      • 2011-10-18
      • 2019-10-25
      • 1970-01-01
      • 2016-06-16
      相关资源
      最近更新 更多