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
已同步
指定该方法一次只能由一个线程执行。静电方法锁定类型,而实例方法锁定实例。在任何实例函数中只能执行一个线程,在类的任何静电函数中只能执行一个线程。
这篇关于如何在多线程环境中只执行一次挡路代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:如何在多线程环境中只执行一次挡路代码?
猜你喜欢
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01