Открытые свойства в модуле VB - межклиентское поведение - PullRequest
4 голосов
/ 15 октября 2010

Может ли один клиент вызвать открытое свойство в модуле 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

, сначала установив Свойство, а затем получая значение в рамках WhwhatMethod () ...

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 В ТЕЧЕНИЕ первого запуска клиента через WheverMethod (). Это беспокоит меня, и я пытался выяснить, если это возможно. Любое подтверждение или иное, как это было бы полезно, спасибо!

Ответы [ 2 ]

2 голосов
/ 15 октября 2010

Модули в VB.Net совместно используются в AppDomain.Таким образом, два клиента в одном и том же AppDomain будут работать на одном и том же экземпляре любого данного модуля.Это означает, что можно легко увидеть результаты другой записи в модуль, если они работают параллельно в одном и том же AppDomain

. Во многих случаях лучше всего рассматривать данные, хранящиеся в модуле, как глобальные (этоне является действительно глобальным, но ведет себя таким образом для многих образцов).

1 голос
/ 15 октября 2010

Да, если под "клиентом" вы подразумеваете отдельные потоки в одном приложении (также предполагается, что один процесс процессора и один AppDomain).

Теперь вы предполагаете, что это "тревожно", если это возможно, поэтому я предполагаю, что вы хотите убедиться, что этого не произойдет? Другими словами, вы хотите убедиться, что значение GetSetDateTime остается неизменным во время выполнения WhateverMethod.

Похоже, что WhateverMethod запускается только "клиентом 1", а код "клиента 2", который изменяет свойство GetSetDateTime, не зависит от WhateverMethod. Не похоже, что SyncLock поможет здесь.

Если оба клиента могут изменить GetSetDateTime в любое время, вам нужно изменить WhateverMethod следующим образом:

Private Sub WhateverMethod()
        Dim localNow = Now
        GetSetDateTime = localNow
        ...
        SomeFunction(localNow)
        ...    
        SomeOtherFunc(localNow)
        ...
End Sub

Помогает ли это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...