【问题标题】:Are session variables shared across threads?会话变量是否跨线程共享?
【发布时间】:2015-08-27 15:00:24
【问题描述】:

我正在处理一个 VB.Net 项目,我想要一种快速而肮脏的方式,让第二个线程执行某些功能,然后将一些可变结果存储到会话中。然后我想从第一个线程访问该变量(当然在同一个会话中)。

这是代码示例...

按钮#1

Sub button_Click1(byVal sender As Object, ByVal e As Event Args)

textfield1.Visible = False
lable2.Visible = True
textfield2.Visible = True
button_Click2.Visible = True

Dim thread2 As New System.Threading.Thread(AddressOf foothread)
thread2.Start(textfield1.Text.ToString)

End Sub

按钮#2

Sub button_Click2(byVal sender As Object, ByVal e As Event Args)
If(textfield2.Text = "is cool" And System.Web.HttpContext.Current.Session("myBool") = true) Then
 lable2 = "You're right!"
 else
 lable2 = "???"
 end If  

线程#2

Public Sub thread2(ByVal str1 As String)

If(srt1 = "Stack/Flow") Then
System.Web.HttpContext.Current.Session("myBool") = true 
Else
System.Web.HttpContext.Current.Session("myBool") = false
End If

End Sub

显然这不是一个真实的生产示例,我正在线程中运行一个冗长的查询,该查询将返回我的会话变量(由于该框的网络流量而冗长)

这可能吗?有没有更好的办法?这甚至会起作用吗? 多线程应用程序的新手。

谢谢!

【问题讨论】:

    标签: asp.net vb.net multithreading session


    【解决方案1】:

    不,这行不通。第二个线程没有 HTTP 上下文,只有运行以处理请求的线程才有 HTTP 上下文。

    您可以为该方法创建一个类以在第二个线程中运行,并将任何输入和输出数据添加为该类中的成员:

    Public Class Thread2Class
    
      Public Str1 As String    
      Public MyBool As Boolean
    
      Public Sub Run()
    
        If Str1 = "Stack/Flow" Then
          MyBool = True 
        Else
          MyBool = False
        End If
    
      End Sub
    
    End Class
    

    创建类的实例,设置输入数据,启动线程:

    Dim thread2 As New Thread2Class
    thread2.Str1 = Lable1.Text.ToString
    Dim thread2 As New System.Threading.Thread(AddressOf thread2.Run)
    thread2.Start()
    

    保留对类的引用,以便在线程结束时从成员中读取结果:

    Dim result As Boolean = thread2.MyBool
    

    【讨论】:

    • 如果我使用一个肮脏、肮脏的一想到就不寒而栗 全局变量是否可以从两个线程访问全局变量?
    • @Christopher:它可以从所有线程访问,但所有用户将共享同一个变量。您不会知道哪个用户将结果放入变量中。
    猜你喜欢
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多