分配函数值(而不使用返回关键字)及其对同步代码执行的影响

|| 我想知道使用之间是否有区别
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
在这种情况下,我的锁可能保持了太长时间。对于值类型,第一个代码将是可接受的,但对于引用类型,第一个将释放锁,然后返回对该对象的引用,并且使用者将具有对该值的非同步访问,第二个可能会或可能不会起作用,具体取决于在函数中断之间执行了多少代码。 谁能帮助我理顺这些概念?     
已邀请:
RETURN 3和v = 3绝对有区别 Return X在那终止呼叫,但是它肯定会经过您可能已经打开的所有try catch。 v = 3只是将返回值设置为3,但不返回。在函数中继续执行,直到函数结束或退出函数为止。 我不确定对同步锁问题有100%的把握,但是我敢打赌,比之退出它会正确地终止它。     
请不要再使用“给函数名称赋值并返回”模式。它对我们中的一些人来说是6英镑。 也就是说,如果查看使用return和Assign函数名称的代码生成的IL,则会发现它100%相同。 至于您的其他问题,根据MSDN:   SyncLock块保证释放锁,无论您如何退出该块     

要回复问题请先登录注册