【发布时间】:2015-03-26 06:40:35
【问题描述】:
考虑以下代码sn-p:
public void Do()
{
....
Task.Delay(5000).ContinueWith(t => DoSomething());
....
}
假设Do 方法在Delay 任务完成之前完成执行,并且DoSomething 是不可取消的。
ContinueWith 方法返回的 Task 没有被维护的引用是否会导致某种内存泄漏?
【问题讨论】:
-
如果您的代码只是
Task.Delay(5000);,您也可以这么说 - “没有维护对返回的任务的引用” 我很确定不会t 泄漏。 -
即使您愿意,我认为您实际上也不会在托管上下文中泄漏内存。当引用类型的实例没有引用它时,GC 最终会来收集它。
-
虽然不是泄漏,但你的任务将是“未观察到的”,如果抛出任何异常,未观察到的任务会导致混乱。它只能由任务终结器检测到,该终结器在垃圾收集期间在不可控的时间运行。所以我仍然建议重写你的代码。
标签: c# .net memory-leaks task-parallel-library