我使用以下代码创建任务。
但似乎应用程序关闭时,Task
仍在内存中......
如何正确删除在Task.Factory.StartNew上创建的任务?
谢谢!
class Service()
Task job;
void DoJob()
{
job = (Task.Factory.StartNew(() =>
{
try
{
}
catch (Exception ex)
{
}
}, TaskCreationOptions.AttachedToParent));
}
答案 0 :(得分:3)
当进程退出操作系统时,释放该进程持有的所有资源。释放所有内存。这种清理程序非常可靠。您可以假设您的任务所占用的内存已正确清理。
你看到了什么 - 你误解了它。
答案 1 :(得分:1)
默认情况下,Task
作为后台线程运行,这意味着您的Task
应该在应用程序退出时消失。
答案 2 :(得分:0)
任务包含一个IDisposable的WaitHandle。因此,任务也是IDisposable,如果你不再需要它,需要处理。
但是,只有在直接访问Task的WaitHandle(.NET 4.5)时才需要Dispose the Task。在.NET 4.0之前,当您直接调用Waitx()方法之一或句柄时,必须调用dispose。
但是当对象从内存中清除时,IDisposable没有影响。这是垃圾收集的工作,让garbabe收集他的工作。