我有一个主要设计为POCO类的类,各种线程和任务可以读取其值,只有其他只偶尔更新这些值.这似乎是ReaderWriterLockSlim的理想场景.
问题是,在类中,如果属性需要是线程安全的,如果属性是bool,那是否过度杀伤?如果它是一个int会发生什么?约会时间?
public class MyClass
{
private bool _theValue = false;
private ReaderWriterLockSlim _theValueLock = new ReaderWriterLockSlim();
public bool TheValue
{
get
{
bool returnVal = false;
try
{
_theValueLock.EnterReadLock();
returnVal = _theValue;
}
finally
{ _theValueLock.ExitReadLock(); }
return returnVal;
}
set
{
try
{
_theValueLock.EnterWriteLock();
_theValue = value;
}
finally
{ _theValueLock.ExitWriteLock(); }
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有这些代码都是矫枉过正的,而且简单......
public bool TheValue { get; set; }
Run Code Online (Sandbox Code Playgroud)
......会足够吗?因为Type是bool,安全吗?如果是的话,什么时候变得不安全?字节?诠释?约会时间?
编辑
我的基本架构是具有此类存储状态.也许有一个服务负责对这个类进行写操作.所有其他类都可以根据此状态数据读取和执行其逻辑.我会尽力确保所有数据都是一致的,但如下所述,我主要担心的是数据的原子性和危险性.
结论
感谢大家的回应,一切都很有价值.我主要担心的是写入/读取的原子性(即担心痉挛).对于.NET平台,如果有问题的变量是一个小于4个字节的内置值类型,则读取和写入是原子的(例如,short和int很好,long和double不是).
我正在尝试利用Beta API将Azure用户分配给应用程序。
我查看了文档,并使用HttpClient
和在C#控制台应用程序中尝试了多种尝试WebClient
,但均未成功。然后,我去了Microsoft图浏览器https://developer.microsoft.com/en-us/graph/graph-explorer。我无法正常工作。
我看了一下文档 https://developer.microsoft.com/zh-cn/graph/docs/api-reference/beta/api/approleassignment_get
该文档的HTTP请求的实际文档与示例不匹配。Graph Explorer似乎暗示该示例是正确的,但是通过各种尝试,我只能得到
{
"error": {
"code": "Request_UnsupportedQuery",
"message": "Direct queries to this resource type are not supported.",
...
}
}
Run Code Online (Sandbox Code Playgroud)
我的基本网址是 https://graph.microsoft.com/beta/appRoleAssignments/
该示例说,{id}
但我不知道要输入什么。我输入了几个guid,用户ID,对象ID,资源ID,但没有一个起作用。
这并不是说有任何拒绝访问的消息,因此我认为它与Scopes无关(尽管与此同时文档也有些空白)。
理想情况下,我可以查看给定的Guest Azure用户是否有权访问特定的应用程序,然后可以去更新作业。我可能还需要删除分配。
我有2个列表.
var adultList = new List<Dude>();
adultList.Add(new Dude() { ID = 2, Name = "Randy Marsh" });
adultList.Add(new Dude() { ID = 3, Name = "Jimbo Kern" }); // no kids
adultList.Add(new Dude() { ID = 4, Name = "Gerald Broflovski" });
adultList.Add(new Dude() { ID = 5, Name = "Stuart McCormick" });
adultList.Add(new Dude() { ID = 6, Name = "Liane Cartman" });
adultList.Add(new Dude() { ID = 7, Name = "Ned Gerblansky" }); // no kids
var childList …
Run Code Online (Sandbox Code Playgroud)