Похоже, TryDeleteFile
выполняется в потоке пользовательского интерфейса. Учитывая текущую реализацию, это не асинхронный метод, и он не должен возвращать Task
, а bool
:
public static bool TryDeleteFile(string filePath)
{
try
{
FileInfo fi = new FileInfo(filePath);
if (fi.IsReadOnly)
{
fi.IsReadOnly = false;
}
fi.Delete();
return true;
}
catch (FileNotFoundException)
{
return true;
}
catch (Exception ex)
{
// Log Exception
return false;
}
}
Ключевое слово await
совершенно не нужно, поскольку в методе отсутствуют какие-либо операции await
.
Вы можете вызвать синхронный метод в фоновом потоке в вашей модели представления, используя Task.Run
:
public async Task<bool> DeleteFiles(IList<string> filesToBeDeleted)
{
...
foreach (string filePath in filesToBeDeleted)
{
success = success && await Task.Run(() => IOHelper.TryDeleteFile(filePath));
...
}
return success;
}
Обратите внимание, что показ метода, который является действительно синхронным, с использованием асинхронного API, считается плохой практикой. Пожалуйста, обратитесь к сообщению блога Стивена Туба для получения дополнительной информации.