ASP.NET是System.Web.UI.Page线程安全的
我想知道下面的代码是否是线程安全的 我能否确保ASP.NET是System.Web.UI.Page线程安全的,asp.net,multithreading,Asp.net,Multithreading,我想知道下面的代码是否是线程安全的 我能否确保UniqueFoo确实是唯一的Foo,并且不会被覆盖 public partial class Dummy : System.Web.UI.Page { public string UniqueFoo{ get; set; } protected void Page_Load(object sender, EventArgs e) { var id = int.Parse(Request["Id"]);
UniqueFoo
确实是唯一的Foo,并且不会被覆盖
public partial class Dummy : System.Web.UI.Page
{
public string UniqueFoo{ get; set; }
protected void Page_Load(object sender, EventArgs e)
{
var id = int.Parse(Request["Id"]);
UniqueFoo = SomeThreadSafeWCF.GetUniqueFoo(id);
}
}
以下内容(静态)如何
稍后我想在[WebMethod]
[WebMethod]
public static void SetSomeObject(SetSomeObject obj)
{
SomeThreadSafeWCF service = new SomeThreadSafeWCF ();
service.SetSomeObject(UniqueFoo, obj);
}
编辑:
我从JS获得SetSomeObject
,而UniqueFoo
来自ASP.NET
根据您的回答,如果不在我的
虚拟
类中使用静态
,我会有任何问题吗?您的第二个代码段不是线程安全的,因为您正在修改静态字段的值。因此,例如,如果稍后在本页中尝试读取此UniqueFoo
字段的值,则可能无法获得预期的值
第一个代码段很好,因为字段不是静态的
如果您想在WebMethod中使用UniqueFoo,那么我建议您在调用它时将其传递给这个web方法
[WebMethod]
public static void SetSomeObject(SetSomeObject obj, string uniqueFoo)
{
SomeThreadSafeWCF service = new SomeThreadSafeWCF ();
service.SetSomeObject(uniqueFoo, obj);
}
当然,您的第一个示例是线程安全的,因为当向Web服务器asp.net发送页面帖子的请求时,会生成页面的新实例并调用page_load,因此如果您的SomeThreadSafeWCF.GetUniqueFoo()始终生成唯一的Foo,则一切都是线程保存的谢谢Darin,关于WebMethod调用。如果我还是这样称呼它好吗?我正在从JS传递“SetSomeObject”,而“UniqueFoo”来自ASP.NET。你认为这有什么问题吗?是的,我认为这有问题,因为你在每个请求上都覆盖了静态字段的值。因此,根据你的建议,我还需要从JS中引入“uniqueFoo”。对吧?没错。您已经在
页面\u Load
中计算了它。所以剩下的就是把它写在标记的某个地方。我不太明白SetSomeObject是我从JS获得的东西,所以我也应该从JS获得uniqueFoo?这意味着我不需要“页面加载”,你能分享一些代码示例吗?
[WebMethod]
public static void SetSomeObject(SetSomeObject obj, string uniqueFoo)
{
SomeThreadSafeWCF service = new SomeThreadSafeWCF ();
service.SetSomeObject(uniqueFoo, obj);
}