首页 > 解决方案 > 如何在多线程环境中只运行一次代码?

问题描述

我知道这里已经提出了一些问题,但是那里提供的解决方案对我不起作用。

我正在使用并行执行执行我的自动化代码,其中涉及多个线程。有一些先决条件,例如设置环境,创建我只想执行一次的报告文件夹,但目前,所有线程都在尝试执行这些产生问题的先决条件。

这是我的示例代码。我试图实施这里提到的解决方案。

private readonly object locker = new object();
bool IsModelLoaded = false;

public void initialize()
{
    lock (this.locker)
    {
            if (!IsModelLoaded)
            {
                Console.WriteLine("PrintMsg");
                IsModelLoaded = true;
            }
    }
}

main()
{
    initialize();
}

当我使用 3 个并行线程运行上述代码时,我在控制台中收到 3 条消息。理想情况下,我只希望我的一个线程执行上述代码。

有什么我想念的吗?有没有更好的方法?请建议。感谢这里的任何帮助。

更新:-我也尝试了链接中提到的解决方案,但链接中提到的解决方案仅在我在调试模式下运行代码时才有效。它不能在正常模式下工作。这是我尝试过的两件事

  1. 锁定 (lockThis) {}
  2. [MethodImpl(MethodImplOptions.Synchronized)]

标签: c#multithreading

解决方案


推荐阅读