WPF как избавиться от запущенной операции с Task - PullRequest
1 голос
/ 14 октября 2019

У меня есть метод, который проверяет, существует ли каталог.

public static bool FileExists(string path, int timeout = 500)
{
    Func<bool> func = () => File.Exists(path);
    using (Task<bool> task = new Task<bool>(func))
    {
        task.Start();
        return task.Wait(timeout) && task.Result;
    }
}

Он работает нормально, но когда я закрываю свое приложение wpf, иногда у меня было это исключение:

Задание может быть удалено только в том случае, если оно находится в состоянии завершения (RanToCompletion, Failed или Cancelled)

Есть какие-либо подсказки, как обнаружить исключение? Я пытался свернуть мой код в блок try ... catch, но я думаю, что есть более элегантное решение,

1 Ответ

0 голосов
/ 14 октября 2019

Перегрузка метода Wait принимает CancellationToken. Если вы используете это, вы можете отменить его, используя CancellationTokenSource, как описано в документах .

. В действительности вам не нужно утилизировать задачу:

public static bool FileExists(string path, int timeout = 500)
{
    Func<bool> func = () => File.Exists(path);
    Task<bool> task = Task.Run(func);
    return task.Wait(timeout) && task.Result;
}

Стефан Туб объясняет больше об этом в своем сообщении в блоге:

Нужно ли мне избавляться от Задач?

...