Visual Studio自动生成的代码是否是线程安全的?

时间:2017-01-16 03:50:19

标签: c# multithreading visual-studio thread-safety

我正在学习C#。对不起新手问题。

这是我启动Windows窗体项目时由Visual Studio 2015自动生成的一些代码的一部分。它位于Form1.Designer.cs

    protected override void Dispose(bool disposing)
    {
        if (disposing && (components != null))
        {
            components.Dispose();
        }
        base.Dispose(disposing);
    }

我试图看看我是否正确理解了线程安全的概念。在评估components语句和调用时间null之间,if是否可以设置为components.Dispose()

提前感谢您对此有任何帮助!

1 个答案:

答案 0 :(得分:4)

不,这不是线程安全的代码。您的假设是正确的,components 可能在支票和Dispose之间变为空。

但是,这并不意味着代码不好。并非所有代码都需要是线程安全的。如果两个线程正在处理同一个对象,那么 行为很可能是一个错误,而不是Dispose错误。