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())