Учитывая этот фрагмент кода, я заметил, что мой интерфейс некоторое время блокировался (Windows даже выдавала сообщение о том, что приложение не отвечает.
using (var zip = await downloader.DownloadAsZipArchive(downloadUrl))
{
var temp = FileUtils.GetTempDirectoryName();
zip.ExtractToDirectory(temp); // BLOCKING CALL
if (Directory.Exists(folderPath))
{
Directory.Delete(folderPath, true);
}
var firstChild = Path.Combine(temp, folderName);
Directory.Move(firstChild, folderPath);
Directory.Delete(temp);
}
После некоторых проверок я обнаружил, чтострока, которая гласит:
zip.ExtractToDirectory(temp);
- виновник.
Я думал, что превращения в него будет достаточно, чтобы заставить его работать:
await Task.Run(() => zip.ExtractToDirectory(temp));
Но… этоэто хорошее решение этой проблемы?
У меня есть опыт работы с System.Reactive
(я полностью знаком с реактивным программированием), и я хотел бы знать, есть ли более элегантный способ справиться с этим.