我有三个页面:
Page1 继承自 Window
类。
Page2和Page3继承自UserControl
类。
当我从 Page1 转到 Page2 时,我用两个 Tasks
处理两个长处理对象:
var task1 = Task.Factory.StartNew(() => MyObject1.Dispose());
var task2 = Task.Factory.StartNew(() => MyObject2.Dispose());
List<Task> tasks = new List<Task>();
tasks.Add(task1);
tasks.Add(task2);
// Task.WaitAll(tasks.ToArray());
Page2 和 3 上的代码相同。
如果用户关闭 Page1、2 或 3 会发生什么?
当 Page 关闭时,我的任务仍然会运行吗?还是它也坏了?
我应该使用 Dispatcher
而不是 Task
吗?
谢谢!
最佳答案
没有 a good, minimal, complete code example 就无法准确说出.这取决于窗口关闭时还会发生什么。通常,如果进程仍然存在,那么任务也将存在。该窗口本身并不“拥有”任务,关闭它也不会导致任何这些任务被中断。
但是 TaskFactory.StartNew()
在线程池中运行您的委托(delegate)调用。当进程中不再有任何前台线程时,后台线程(如线程池中的线程)与进程本身一起终止。如果关闭窗口导致进程中唯一的前台线程退出,那么您的所有任务以及进程的其余部分都会停止。
在这两种情况之间,还有很多其他的可能性。以上所有内容都假定您自己的代码不会尝试干扰默认机制。如果这两种解释似乎不适用于您的情况,请提供一个很好的代码示例并澄清您的问题。
关于c# - 窗口关闭时正在运行的任务会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34059478/