.net - 何时在 ForEach 循环中获取属性?

标签 .net multithreading locking foreach

我有一个像这样的带锁的属性 getter :

Public ReadOnly Property ActiveClientList() as List(Of TcpClient)
    Get
        SyncLock(m_activeClientListLock)
            Return m_activeClientList
        End SyncLock
    End Get
End Property

当我执行 ForEach 循环时,何时获取属性?我的意思是,在这个循环中,当列表被锁定时?在第一次检查?在每次迭代中?在整个循环中?

For Each client as TcpClient in Me.ActiveClientList

Next

提前致谢!

最佳答案

For Each 实际上是语法糖。编译器将其扩展为:

Dim enumerator As IEnumerator(Of TcpClient)

enumerator = Me.ActiveClientList.GetEnumerator()

While enumerator.GetNext()

    Dim client As TcpClient
    client = enumerator.Current

    'Loop body inserted here.'

End While

如果这不是真的 VB.NET,我深表歉意(我是 C# 男孩)。

如您所见,对 ActiveClientList 的调用仅在循环开始时发生一次。

关于.net - 何时在 ForEach 循环中获取属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1980297/

相关文章:

.net - 静态属性和锁使用

.net - 方法信息上的返回类型信息

c# - Entity Framework - 为什么这行得通?

java - 信号量简单示例

c - 用 C 语言调试 Lamport 烘焙算法的简化版本

ruby-on-rails - 如何确保 Heroku 上的多进程 Unicorn Rails 应用程序中方法的单次运行

.net - MEF:将类型与对象一起注入(inject)?

sql - 如何删除主表中与临时表中的 ID 匹配的行?

wpf - VSTO 任务 Pane 中 WPF 控件的 Dispatcher 关闭

c++ - 为什么 POSIX 被称为 "Portable Operating System Interface"?