WPF如何使用任务处理正在运行的操作
我有一个检查目录是否存在的方法WPF如何使用任务处理正在运行的操作,wpf,task,Wpf,Task,我有一个检查目录是否存在的方法 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.Wai
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;
}
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
使用(任务=新任务(func))
{
task.Start();
返回task.Wait(超时)&&task.Result;
}
}
它工作正常,但当我关闭wpf应用程序时,有时会出现以下异常:
仅当任务处于完成状态(RanToCompletion、Faulted或Canceled)时,才可以处理该任务
有关于如何检测异常的提示吗?我试图将代码包装到try…catch块中,但我认为还有更多的元素和解决方案,有一个超负荷的
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;
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
Task=Task.Run(func);
返回task.Wait(超时)&&task.Result;
}
Stephan Toub在他的博客文章中对此做了更多解释:
有一个重载
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;
}
公共静态bool文件存在(字符串路径,int timeout=500)
{
Func Func=()=>File.Exists(路径);
Task=Task.Run(func);
返回task.Wait(超时)&&task.Result;
}
Stephan Toub在他的博客文章中对此做了更多解释: