【发布时间】:2016-06-29 15:27:15
【问题描述】:
我有viewModelA 和viewA。我在 viewModelA 的构造函数中运行了一些耗时的操作:
public class ViewModelA
{
Task task;
CancellationTokenSource token;
public viewModelA()
{
task = new Task(TimeConsumingOperation, token.Token);
}
private void TimeConsumingMethod()
{
//some time consuming operation
}
~ViewModelA()
{
token.Cancel();
}
}
假设我运行这个应用程序,它只包含viewA 和viewModelA 并且程序开始一些耗时的操作(TimeConsumingMethod()) 并且突然我想立即关闭程序,但我知道TimeConsumingMethod()仍在运行。
所以我的问题是我应该取消终结器内的任务吗?或者我不应该创建终结器方法,因为应该为非托管资源调用终结器?
【问题讨论】:
-
嗯,如果你杀死应用程序,那不会杀死任务吗? stackoverflow.com/questions/1687677/…
-
终结器用于释放非托管资源。您不应与终结器中的托管资源进行交互。
-
你应该将
viewModelA设为一次性,你应该取消那里的任务。 -
@AnthonyRussell 是的,你是对的,但是在接受的答案末尾有一些重要的句子“更好的方法是在关闭之前向工作人员发出信号,等待它优雅地完成,然后退出。”
-
是的,我不确定为什么会有反对票。这是一个有效的问题。
标签: c# wpf garbage-collection task-parallel-library cancellation