Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.NET 4.0:ThreadStatic不';t对于我的TdConnection属性来说似乎是线程安全的_.net_Thread Safety_Instance_Reference Type_Threadstatic - Fatal编程技术网

VB.NET 4.0:ThreadStatic不';t对于我的TdConnection属性来说似乎是线程安全的

VB.NET 4.0:ThreadStatic不';t对于我的TdConnection属性来说似乎是线程安全的,.net,thread-safety,instance,reference-type,threadstatic,.net,Thread Safety,Instance,Reference Type,Threadstatic,这是我的密码: <ThreadStatic()> Dim _GlobalConnection As TdConnection Public Property GlobalConnection As TdConnection Get If _GlobalConnection Is Nothing Then _GlobalConnection = New TdConnection End If If _Gl

这是我的密码:

<ThreadStatic()>
Dim _GlobalConnection As TdConnection

Public Property GlobalConnection As TdConnection
    Get
        If _GlobalConnection Is Nothing Then
            _GlobalConnection = New TdConnection
        End If
        If _GlobalConnection.State <> ConnectionState.Open Then
            OpenConnection(_GlobalConnection)
        End If
        Return _GlobalConnection
    End Get
    Set(ByVal value As TdConnection)
        _GlobalConnection = value
    End Set
End Property

这些.LoadData()方法中的每一个都在一个单独的线程中执行,并且它们都引用了上面我的GlobalConnection属性。最初,我没有使用ThreadStatic属性编写所有这些内容。遇到错误后,我将GlobalConnection属性设置为ThreadStatic,问题就消失了。当它投入生产时,这个web应用程序将被多人使用。这就是促使我在两个web浏览器中打开同一页面的原因。我原以为会有两个独立的线程,但也许我错了。

每个请求应该有一个连接,而不是每个线程一个连接

为此,请将其存储在
HttpContext.Current.Items
而不是ThreadStatic字段中。

您还应该在
EndRequest
处理程序中关闭连接。

每个请求应该有一个连接,而不是每个线程一个连接

为此,请将其存储在
HttpContext.Current.Items
而不是ThreadStatic字段中。

您还应该关闭
EndRequest
处理程序中的连接。

它不工作是因为它不是
static
,它需要是
static
,才能应用
ThreadStatic
属性它不工作是因为它不是
static
,要应用
ThreadStatic
属性,它必须是
static
。如果您在一个请求中使用多个任务,这不会有帮助。因此,看起来每次需要时我都必须声明一个新的连接对象。好极了。好的,也谢谢你的链接。它表明,在ASP.NET应用程序中,线程的工作方式有很大不同。如果在一个请求中使用多个任务,这将不会有帮助。因此,看起来每次需要时,我都必须声明一个新的连接对象。好极了。好的,也谢谢你的链接。它表明,在ASP.NET应用程序中,线程的工作方式有很大不同。
Dim Tasks As New List(Of Task)

Tasks.Add(Task.Factory.StartNew(Sub() ucEmployee.LoadData()))
Tasks.Add(Task.Factory.StartNew(Sub() ucSales.LoadData()))
Tasks.Add(Task.Factory.StartNew(Sub() ucServers.LoadData()))
Tasks.Add(Task.Factory.StartNew(Sub() ucApps.LoadData()))

Task.WaitAll(Tasks.ToArray())