c# - 如何在多线程环境中只运行一次代码?
问题描述
我知道这里已经提出了一些问题,但是那里提供的解决方案对我不起作用。
我正在使用并行执行执行我的自动化代码,其中涉及多个线程。有一些先决条件,例如设置环境,创建我只想执行一次的报告文件夹,但目前,所有线程都在尝试执行这些产生问题的先决条件。
这是我的示例代码。我试图实施这里提到的解决方案。
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 条消息。理想情况下,我只希望我的一个线程执行上述代码。
有什么我想念的吗?有没有更好的方法?请建议。感谢这里的任何帮助。
更新:-我也尝试了链接中提到的解决方案,但链接中提到的解决方案仅在我在调试模式下运行代码时才有效。它不能在正常模式下工作。这是我尝试过的两件事
- 锁定 (lockThis) {}
- [MethodImpl(MethodImplOptions.Synchronized)]