要关闭窗口,我使用了Environment.Exit(0);。 我收到如下错误:
未处理System.Threading.Tasks.TaskCanceledException 消息:WindowsBase.dll中发生了类型为'System.Threading.Tasks.TaskCanceledException'的未处理异常 附加信息:任务已取消。
在关闭窗口之前,有什么方法可以检查任何任务是否还在运行吗?
谢谢。
Joon
答案 0 :(得分:2)
创建任务时,请将其存储在某处。如果计划创建多个任务,则可能需要一个集合来存储它们。例如,可以将其存储在ConcurrentBag中,即使在多个线程上创建任务,这也是安全的。
static class Globals
{
static public ConcurrentBag<Task> RunningTasks { get; } = new ConcurrentBag<Task>();
}
//Main code
var task = Task.Run( () => DoSomethingThatTakesALongTime() );
Globals.RunningTasks.Add(task);
然后,在退出之前,查看它们是否仍在运行。如果是这样,您可以使用Task.Yield放弃控制权,并给他们运行的机会。
while (Globals.RunningTasks.Any( t => !t.IsCompleted ))
{
await Task.Yield();
}
Environment.Exit(0);
但是,更好的解决方案是在可能的情况下处理异常。