仅执行一次代码块

Kay*_*oze 6 c# wpf multithreading

以下代码块预先在C#中加载对象.

public bool IsModelLoaded { get; set; }
public override MyObject Load()
    {
        if (!IsModelLoaded)
        {
            Model = MyService.LoadMyObject(Model);
            IsModelLoaded = true;
        }
        return Model;
    }
Run Code Online (Sandbox Code Playgroud)

我的意图是只运行一次这个块,因此只加载模型一次.不过,这个代码块从2个不同的线程运行两次..

如何确保此块仅运行一次?(在多线程上).

谢谢.

Gaz*_*yer 2

最简单的是添加

[MethodImpl(MethodImplOptions.Synchronized)]
public override MyObject Load()
{
   //snip
}
Run Code Online (Sandbox Code Playgroud)

但请注意,这会锁定整个对象,而不仅仅是方法。这并不是很好的练习。

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx

同步

指定该方法一次只能由一个线程执行。静态方法锁定类型,而实例方法锁定实例。只有一个线程可以在任何实例函数中执行,并且只有一个线程可以在任何类的静态函数中执行。