WPF 如何使用任务释放正在运行的操作



我有一个检查目录是否存在的方法。

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应用程序时,有时我会遇到以下异常:

仅当任务处于完成状态(RanToComplete、出错或已取消(时,才能释放该任务

任何提示如何检测异常?我试图将我的代码包装到 try...抓住块,但我认为还有更多优雅的解决方案,

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;
}

Stephan Toub在他的博客文章中对此进行了更多解释:

我需要处置任务吗?

最新更新