我正在尝试从Azure Blob存储中下载多个文件,以便在WPF中使用更新程序。我正在使用Storage Client 3.0版并尝试使用Async方法。我想下载文件并跟踪每个文件的进度,但是,DownloadToStreamAsync方法没有IProgress重载。另一个问题是文件继续下载(我知道这是因为我正在看文件在temp目录中增长),但应用程序的东西在它开始下载后立即完成。我是.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();
}
答案 0 :(得分:2)
您不应该使用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
方法并没有真正等待它完成。