#c# #file #uwp #async-await #storage
#c# #файл #uwp #асинхронный — ожидание #Хранение
Вопрос:
У меня была проблема с ‘RandomAccessStream.CopyAndCloseAsync()’ который не смог загрузить некоторые файлы из-за некоторых проблем с брандмауэром (как я предполагаю). Мне нужно было найти решение, чтобы отменить загрузку, и я придумал это.
await Task.Run(() =>
{
Task.Run(async () =>
{
await RandomAccessStream.CopyAndCloseAsync(inputStream, outputStream);
}).Wait(cancelDownload.Token);
});
inputStream.Dispose();
outputStream.Dispose();
Когда загрузка происходит с ошибками, файл должен быть удален. Это то, что я использую:
async public Task DeleteFileAsync(string filename)
{
StorageFolder folder = await App.GetDocumentFolder();
try
{
var file = await folder.GetFileAsync(filename);
await file.DeleteAsync(StorageDeleteOption.PermanentDelete);
}
catch (System.IO.FileNotFoundException e)
{
Log.Warn(e.Message)
}
}
Теперь самое странное, что файл не удаляется. В то же время мой код не переходит в часть «улова».
НО файл удаляется ПОСЛЕ закрытия приложения UWP.
Я предполагаю, что ‘await RandomAccessStream.CopyAndCloseAsync(InputStream, OutputStream);’ блокирует файл, чтобы я не мог его удалить ?!
Есть ли какие-либо возможности снять эту блокировку файла? Может быть, мне нужно что-то другое, кроме ‘.Dispose()’ ?
Комментарии:
1. Пожалуйста, вызовите
CopyAndCloseAsync
as task и дайте ему токен, напримерawait RandomAccessStream.CopyAndCloseAsync(inputStream, outputStream).AsTask(cancelDownload.Token);
2. @NicoZhu-MSFT попробовал. Я создал byteobserver для этого файла. Размер файла остается равным 0 байтам. Моя загрузка CancelDownload. Токен отменяется, но мое приложение UWP застряло в ‘await RandomAccessStream. CopyAndCloseAsync()’ до завершения загрузки (чего никогда не будет)
3. Почему вы оборачиваете двойную задачу для
CopyAndCloseAsync
метода?4. @NicoZhu-MSFT Асинхронная задача необходима, чтобы я мог отменить зависшую загрузку и продолжить загрузку следующего файла. Задача синхронизации необходима, чтобы мой пользовательский интерфейс не зависал
5. Не могли бы вы поделиться с нами образцом, я протестирую и отредактирую базу на вашей демо-версии.