1. 程式人生 > >對 精緻碼農大佬 說的 Task.Run 會存在 記憶體洩漏 的思考

對 精緻碼農大佬 說的 Task.Run 會存在 記憶體洩漏 的思考

## 一:背景 ### 1. 講故事 這段時間專案延期,加班比較厲害,部落格就稍微停了停,不過還是得持續的技術輸出呀! 園子裡最近挺熱鬧的,精緻碼農大佬分享了三篇文章: * 為什麼要小心使用 Task.Run [https://www.cnblogs.com/willick/p/14078259.html] * 小心使用 Task.Run 續篇 [https://www.cnblogs.com/willick/p/14100973.html] * 小心使用 Task.Run 終篇解惑 [https://mp.weixin.qq.com/s/IMPgSsxTW0LGArfPP7rQXw] 核心程式碼如下: ``` C# class Program { static void Main(string[] args) { Test(); Console.ReadLine(); } static void Test() { var myClass = new MyClass(); myClass.Foo(); } } public class MyClass { private int _id = 10; public Task Foo() { return Task.Run(() => { Console.WriteLine($"Task.Run is executing with ID {_id}"); }); } } ``` > 大意是: `Test()` 方法執行完之後, myClass 本該銷燬,結果發現 `Foo()` 方法引用了 _id ,導致 GC 放棄了對 myClass 的回收,從而導致記憶體洩漏。 如果我的理解有誤,請大家幫忙指正,挺有意思,評論區也是熱鬧非凡,總體看下來發現還是有很多朋友對 `閉包`, `記憶體洩漏`,`GC` 等概念的認知比較模糊,同樣作為技術博主,得要蹭點熱度