VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • 对 精致码农大佬 说的 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]

核心代码如下:


    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 等概念的认知比较模糊,同样作为技术博主,得要蹭点热度


相关教程