asp.net - ASP.NET session 中的共享方法

标签 asp.net vb.net multithreading concurrency shared

作为上一个问题的后续,我问了 "ASP.Net Architecture Specific to Shared/Static functions"

我仍在努力理解在 ASP.NET 中使用共享方法的含义。

例如,让我们采用以下代码。

    Public Shared Function GetCategoryByID(ByVal CategoryID As Guid) As Category
        If Not CategoryID.Equals(Guid.Empty) Then
            Dim res As New Category

            Using sqlConn As New SqlConnection(My.Settings.ConnectionString)
                sqlConn.Open()

                Using dr As IDataReader = CategoryDataLayer.GetCategoryByIDQuery(sqlConn, CategoryID)
                    Return CType(BaseDataLayer.FillObject(res, dr), Category)
                End Using
            End Using

        Else
            Return Nothing
        End If
    End Function

现在我想象客户端 1 从他们与 guid {A20E625F-2333-4742-BFD9-05BE7649222D} 的 session 中连接并运行此方法 GetCategoryByID()。

现在假设进程将要执行以下行。

Using dr As IDataReader = CategoryDataLayer.GetCategoryByIDQuery(sqlConn, CategoryID)

此时客户端 2 运行相同的共享方法,但使用 guid {6D806B82-FC7F-4124-AFB9-45E2689BC9F5}。

此时 CategoryID 是否不会变为 {6D806B82-FC7F-4124-AFB9-45E2689BC9F5} 并因此干扰客户端 1,因为现在 CategoryID 已更改,这是一个共享方法?

有人可以澄清一下吗?

PS:对于本质上重复的帖子,我深表歉意,但回想起来,我觉得原始帖子中的答案不够清楚(至少对我而言)。也许我也不够具体...

最佳答案

在您的代码示例中,变量 res 是共享方法的局部变量。没有人,甚至是另一种共享方法都不能触及该变量。它会在方法的生命周期内存在,然后就消失了。 CategoryId 完全相同,它是一个不能从外部访问的局部变量。

VB 有另一个名为 Static 的概念,它与 C# 版本的 static 有很大不同,这可能会引起一些混淆。

关于asp.net - ASP.NET session 中的共享方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113395/

相关文章:

c# - "The application attempted to perform an operation not allowed by the security policy."可能存在信任问题?

c# - 从 ASP.NET 插入到 MS Access

c# - 如何从 http 服务器下载需要引用才能允许下载的文件?

wpf - vb.Net:在BackgroundWorker中创建UI

c# - 根据其他选定的下拉列表项更改一个下拉列表数据

c# - 在 MVC 中为数据模型创建接口(interface)

vb.net - CollectionAssert.AreEqual 通过但 CollectionAssert.AreEquivalent 失败?

c# - VS 2017 的任务窗口中的 "Status" "Scheduled"是什么意思?

c++ - 为程序全局设置 Linux 上的默认堆栈大小

java - 独立的进程,每个进程都在多线程JAVA中运行