一个客户端是否可以在VB.NET模块中调用公共属性,并看到该公共属性的值是否被同时访问它的另一个客户端更改?
示例:
客户1呼叫
Public Module DataModule
Private theDateTime As DateTime = GetAdjustedDateTime() //initial TZ value
Public Property GetSetDateTime() As DateTime
Get
Return theDateTime
End Get
Set(ByVal value As String)
theDateTime = value
End Set
End Property
End Module
首先设置Property,然后在WhateverMethod()...
中获取值Partial Class admintours
Inherits System.Web.UI.Page
Private Sub WhateverMethod()
GetSetDateTime = Now
...
...
... //code
...
SomeFunction(GetSetDateTime) //value is 10/14/2010 00:23:56
...
...
//almost simultaneously Client 2 sets the value to Now.AddDays(-1)
...
SomeOtherFunc(GetSetDateTime) //value passed in: 10/13/2010 00:23:56
...
...
... //some more code
...
End Sub
End Class
我遇到了随机实例,看起来另一个客户端可能正在修改(通过设置)GetSetDateTime的值在第一个客户端运行WhateverMethod()期间。这对我来说是惊人的,我一直试图弄清楚这是否可能。任何确认或其他方面都会有所帮助,谢谢!
答案 0 :(得分:2)
VB.Net中的模块在AppDomain
内共享。因此,同一AppDomain
内的两个客户端将在任何给定模块的同一实例上运行。这意味着如果在同一AppDomain
在许多方面,最好将存储在模块中的数据视为全局数据(它不是真正的全局数据,但对许多样本来说都是这样的)。
答案 1 :(得分:1)
是的,如果“客户端”是指单个应用程序中的单独线程(也假设单个CPU进程和单个AppDomain
)。
现在,如果可能的话,你建议它“惊人”,所以我假设你想确保这不会发生?换句话说,您希望确保在GetSetDateTime
执行期间WhateverMethod
的值保持不变。
听起来WhateverMethod
仅由“客户端1”运行,而更改GetSetDateTime
属性的“客户端2”代码独立于WhateverMethod
。这听起来不像SyncLock
会有所帮助。
如果两个客户都可以随时更改GetSetDateTime
,那么您需要像这样修改WhateverMethod
:
Private Sub WhateverMethod()
Dim localNow = Now
GetSetDateTime = localNow
...
SomeFunction(localNow)
...
SomeOtherFunc(localNow)
...
End Sub
这有帮助吗?