请求和垃圾回收期间的WCF异步

时间:2015-06-11 14:54:29

标签: c# wcf

我有自托管的WCF服务。它提供了一个处理函数DoSth()。

处理可能需要很长时间,因此我需要先将OK返回给调用者 完成任务。目前我通过调用

实现了这一点
Task.Factory.StartNew(() => DoWork());

垃圾收集器可能会干扰,以致刚刚创建的任务可能永远不会完成?

如果程序是自托管的,我会说它不会干扰那么久 当主机运行时(静态变量也保持其值)。 如果我错了,请纠正我。

但是如果服务托管在IIS中,垃圾收集会如何反应? 如果干扰有没有办法阻止它?

1 个答案:

答案 0 :(得分:0)

GC永远不会收集可能在将来被可执行代码访问的对象(至少通过任何托管引用)。这就是它的设计方式。

如果某些代码的执行方式有可能使用该对象,则不允许GC对其进行清理。它只清理可以证明永远不会被任何可执行代码访问的对象。

由于此任务,它被赋予了委托,并且委托中使用的对象都可以被处理此请求的线程访问,它们都可以访问,并且不符合收集条件。

基本上你唯一需要甚至考虑的问题,“我试图使用的对象可能会在我完成之前被GC清理干净“当你处理非托管引用时,例如当使用WeakReference类或使用其他语言时。