私の非同期メソッドから何らかの奇妙な動作が見られます。私は最近、私のzipアーカイブ全体を解凍しても、すべてのWindowsデバイスでパフォーマンスが向上していないことを発見しました。私が必要とする1つのファイルを抽出し、それを使って残りのアーカイブを抽出するのを待っているので、しかし、現在、単一のファイルを抽出するコードとアーカイブ全体を抽出するコードは、同じメソッドから呼び出されています。このメソッドは非同期で、最終的にはApp.xaml.cs.xのコードでUIスレッドで呼び出されます。このメソッドを呼び出すと、awaitキーワードを使用して、アプリケーションの読み込みに必要なzipアーカイブに1つのファイルがあるので、完了するのを待ちます。待機中の非同期呼び出しを待機しないでください。
App.xamlは、次のようになります。
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
}
問題はExtractFullArchiveが完了するまでDownloadArchiveは戻らないということで、ExtractFullArchiveはLONGを取っているものです。
SharedContext.ChangeUniverse("1234");
SharedContextはこのようになります時間。 DownloadArchiveが完了している間、非同期で実行するにはExtractFullArchiveが必要です。私は本当にそれが終わるとき気にしません。
実際には「ExtractToDirectory」は非同期メソッドですか? –