How to execute a block of code only once on a multithreading environment?(如何在多线程环境中只执行一次挡路代码?)
本文介绍了如何在多线程环境中只执行一次挡路代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面的代码挡路在C#中执行对象加载。
public bool IsModelLoaded { get; set; }
public override MyObject Load()
{
if (!IsModelLoaded)
{
Model = MyService.LoadMyObject(Model);
IsModelLoaded = true;
}
return Model;
}
我的目的是只运行此挡路一次,因此只加载Model一次。不过,此代码挡路从2个不同的线程运行了两次。
如何确保此挡路只运行一次?(在多个线程上)。
推荐答案
最简单的方法是添加
[MethodImpl(MethodImplOptions.Synchronized)]
public override MyObject Load()
{
//snip
}
但请注意,这会锁定整个对象,而不仅仅是方法。不是很好的练习。
http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx
已同步
指定该方法一次只能由一个线程执行。静电方法锁定类型,而实例方法锁定实例。在任何实例函数中只能执行一个线程,在类的任何静电函数中只能执行一个线程。
这篇关于如何在多线程环境中只执行一次挡路代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
编程基础网
本文标题为:如何在多线程环境中只执行一次挡路代码?
基础教程推荐
猜你喜欢
- WPF 模态进度窗口 2022-01-01
- C# 从 List<List<int>> 中删除重 2022-01-01
- 禁止输入少量字符,例如'<'、'&a 2022-01-01
- 我应该在后面的代码中直接使用 Linq To SQL 还是使 2022-01-01
- .NET SerialPort DataReceived 事件未触发 2022-01-01
- 如果有人提交恶意软件Nuget包怎么办? 2022-01-01
- 当值可以是对象或空数组时反序列化 JSON 2022-01-01
- Azure Functions:CosmosDBTrigger 未在 Visual Studio 中触发 2022-01-01
- Moq It.Is<>不匹配 2022-01-01
- 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行? 2022-01-01
