我看到我的異步方法有一些奇怪的行爲。我最近發現解壓縮我的整個zip文件並不是在所有Windows設備上執行的。這樣我就可以提取我需要的單個文件,並在等待歸檔的其餘部分進行提取時使用它。但是,目前提取單個文件的代碼和提取整個壓縮文件的代碼是用相同的方法調用的。這種方法是異步的,並最終通過App.xaml.cs中的代碼最初在UI線程上調用。當我調用這個方法時,我使用await關鍵字來等待它完成,因爲我需要用於加載應用程序的zip壓縮文件中有一個文件。不要等待正在等待的異步方法內的異步調用
的App.xaml看起來是這樣的:
SharedContext.ChangeUniverse("1234");
SharedContext看起來是這樣的:
public static void ChangeUniverse(string universe) {
await DownloadArchive(universe);
}
public async Task DownloadArchive(string universe) {
ZipArchive archive = magic; // get it somehow
var someLocalFilePath = magic; // the exact location I need to extract data.json
var someLocalPath = magic; // the exact location I need to extract the zip
archive.GetEntry("data.json").ExtractToFile(someLocalFilePath);
// notice I do NOT await
ExtractFullArchive(archive, someLocalPath);
}
public async Task ExtractFullArchive(ZipArchive archive, string path) {
archive.ExtractToDirectory(path, true); // extracting using an override nice extension method I found on SO.com
}
的問題是,DownloadArchive不返回ExtractFullArchive完成,直到和ExtractFullArchive是什麼花費很長的時間。我需要ExtractFullArchive在DownloadArchive完成時異步執行。什麼時候結束我真的不在乎。
'ExtractToDirectory'實際上是一個異步方法嗎? –