Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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
C# WebService应用程序-从静态/共享方法返回新对象_C#_Asp.net_Vb.net_Web Services - Fatal编程技术网

C# WebService应用程序-从静态/共享方法返回新对象

C# WebService应用程序-从静态/共享方法返回新对象,c#,asp.net,vb.net,web-services,C#,Asp.net,Vb.net,Web Services,在webservice应用程序中使用静态/共享方法是否线程安全?此方法将被大量调用以检索新实例 例如: Public Shared GetPerson(ByVal name as String,ByVal surname) as Person Dim p As New Person p.Name = name p.Surname = surname p.Addresses = GetAllAddresses(name) return p End Func

在webservice应用程序中使用静态/共享方法是否线程安全?此方法将被大量调用以检索新实例

例如:

 Public Shared GetPerson(ByVal name as String,ByVal surname) as Person
    Dim p As New Person
    p.Name = name
    p.Surname = surname
    p.Addresses = GetAllAddresses(name)
    return p
End Function  
更新1

发布的代码只是为了回答问题而快速打印的示例。GetAlladResces将返回另一种类型的新实例,因此它是线程安全的


我担心的是,如果同时发出多个请求,我不会返回一个带有一个请求名称和另一个请求姓氏的person实例。

只有在
GetAllAddresses
是线程安全的情况下,它才是线程安全的。否则就好了


关于您的更新1,是的,这会很好。它永远不会像你描述的那样混乱。它总是创建对象的新实例,因此不同的线程不可能干扰彼此的数据。

据我所知,您尝试创建一个
新人
,并将其返回到您的页面

根据该代码,线程安全实际上没有任何意义。您应该注意的是,当您要将此人保存回数据库时,必须确保线程安全,以避免多次写入

在将其写回数据库时,有两种方法可以确保安全(创建新的或进行更新)


一种是使用互斥锁,另一种是使用标准的asp.net会话来锁定页面,这将使线程安全成为整个过程。

鉴于GetAllAddresses只执行读取操作,那么静态方法是完全线程安全的,因为每个重新进入的线程将创建自己的Person实例,将存储在堆栈上的引用


因此,关于更新1,因为每个线程都使用一个新的Person实例,所以两个不同的线程不可能写入同一个Person实例。

这取决于GetAllAddresses的代码是什么样的?