星尘监控报警


代码分析

这个CancellationToken会持续注册委托函数,而委托内保持对TaskCompletionSource的引用,后者又保持了对结果集(即Byte[])的引用,导致这些对象无法释放,积压到GC2中。


解决方案

CancellationToken.Register有个返回值,把它Dispose释放掉,即可取消委托

参考文章

https://stackoverflow.com/questions/14627226/why-is-my-async-await-with-cancellationtokensource-leaking-memory