Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
ASP.NET是System.Web.UI.Page线程安全的_Asp.net_Multithreading - Fatal编程技术网

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);
}