我想知道Linq扩展方法是否是原子的?或者,在进行任何迭代之前,我是否需要跨线程使用的lock任何IEnumerable对象?
声明变量volatile对此有何影响?
总结一下,以下哪项是最好的,线程安全,操作?
1-没有任何锁:
IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
Run Code Online (Sandbox Code Playgroud)
2-包括锁定语句:
IEnumerable<T> _objs = //...
lock(_objs)
{
var foo = _objs.FirstOrDefault(t => // some condition
}
Run Code Online (Sandbox Code Playgroud)
3-将变量声明为volatile:
volatile IEnumerable<T> _objs = //...
var foo = _objs.FirstOrDefault(t => // some condition
Run Code Online (Sandbox Code Playgroud) 我有2个 IEnumerable<int>
IEnumerable<int> x;
IEnumerable<int> y;
Run Code Online (Sandbox Code Playgroud)
确定x中是否存在任何int的最佳方法是什么?
目前我正在使用:
return x.Intersect<int>(y).Count() > 0;
Run Code Online (Sandbox Code Playgroud)
是否可以明显更快地循环并单独测试每个?
foreach (int i in x)
{
foreach (int j in y)
{
if (i == j) return true;
}
}
return false;
Run Code Online (Sandbox Code Playgroud)
列表相对较轻,如果在考虑中重要,则x中不超过50个,y中不超过4个.