我仍然在我的记忆中泄漏狩猎,我注意到以下几点:异步和CancellationTokens/CancellationTokenSource内存问题
我有很多来自F#的默认未来System.Threading.CancellationCallbackInfo对象的实时实例-CancellationTokenSource(异步工作流)。
如果您自己声明一个Source并在MailboxProcessor中使用它来跨越子节点或任务,则问题会变得更糟。
好像因为CancellationTokenSource是抱着这样的引用GC无法收集那些跨越任务/工作流程:
其中大多数CancellationCallbackInfo对象的获取到第二代 - 令人难以置信的,因为我只使用内部的本地引用邮箱处理器 - “循环”工作流程...
这是一个已知问题,是否有解决方案/解决方法?
现在我采空用取消支持和线程ManualResetEvents通过代码这个......不是很好,在所有:(
您能发布一个演示行为的(最小)示例吗?我很难分析问题,但却无法自己运行... – 2012-03-15 11:38:31
我不在办公室的ATM机上,但我会尽快在代码中插入一些东西 - 但核心并不那么困难:这部分直接来自一个MailboxProcessor,我用它作为“排队”IObservable实现的主力(将值排入MailboxProcessors-inbox和Processor“OnNext”所有注册的观察者) - 所涉及的任务不在其中的部分一个邮箱处理器,但是在一个尾递归异步的“Check”-Loop构造中,它跨越了尝试异步ping一个远程主机的任务 – Carsten 2012-03-15 15:19:13