我看到了这段代码,它使用AsParallel()
和Any()
来检查条件:
bool IsAnyDeviceConnected()
{
return m_devices.Any(d => d.IsConnected);
}
为了让它更快:
bool IsAnyDeviceConnected()
{
return m_devices.AsParallel().Any(d => d.IsConnected);
}
但是看看Any()
:
internal static bool Any<T>(this IEnumerable<T> source, Func<T, bool> predicate) {
foreach (T element in source) {
if (predicate(element)) {
return true;
}
}
return false;
}
我并没有看到(显然) - 它关心其他工作的取消 - 一旦发现。
然而 - 这段(其他的)代码确实会“尽快完成” + 取消其他未来的工作:
bool IsAnyDeviceConnected()
{
var res = Parallel.ForEach(m_devices,
(d,loopState) => {
if (d.IsConnected)
loopState.Stop();
});
return !res.IsCompleted;
}
问题:
我的诊断是否正确?在AsParallel
上下文中,Any()
一旦找到项目,不会取消其他线程吗?
注意,我担心我可能看错了源代码。
Enumerable.Any
要复杂得多。 - Sriram Sakthivel