分配函数值(而不使用返回关键字)及其对同步代码执行的影响
||
我想知道使用之间是否有区别
Public Function Foo() As Double
Return 3.0
End Function
和
Public Function Foo() As Double
Foo = 3.0
End Function
但特别是在代码执行方面。
我正在尝试使用同步管理多线程应用程序,并且不确定我是否捕获了每个锁并正确释放。
我知道\'Return \'之后的代码行不会执行,因为该函数失去了焦点,但是如果\'Return \'被包装在SyncLock块中怎么办?
Public Function Foo() As Double
SyncLock fooLock
Return 3.0
End SyncLock
End Function
End SyncLock是否被呼叫?是SyncLock块的缩写形式:
Public Function Foo() As Double
Dim result as Double
Try
Threading.Monitor.Enter(fooLock)
result = 3.0
Finally
Threading.Monitor.Exit(fooLock)
End Try
Return result
End Function
如果我的理解是正确的,那么在函数释放焦点之前,Finally块就到了,但是或者,如果Final等待返回和后续代码,那么可能要等一会儿,Finally才有机会,即
Public Sub DoSomething()
Dim a As Double = Foo
...Do other things
End Sub
Public Function Foo() As Double
Try
Threading.Monitor.Enter(fooLock)
Return 3.0
...返回执行的代码,\'a \'分配给Foo的返回值,然后也许线程上的所有其他任务都完成了,然后
Finally
Threading.Monitor.Exit(fooLock)
End Try
End Function
在这种情况下,我的锁可能保持了太长时间。对于值类型,第一个代码将是可接受的,但对于引用类型,第一个将释放锁,然后返回对该对象的引用,并且使用者将具有对该值的非同步访问,第二个可能会或可能不会起作用,具体取决于在函数中断之间执行了多少代码。
谁能帮助我理顺这些概念?
没有找到相关结果
已邀请:
2 个回复
稼悸
邵酮