Asp.Net N层线程安全静态方法错误处理

Asp.Net N层线程安全静态方法错误处理,asp.net,error-handling,thread-safety,n-tier-architecture,Asp.net,Error Handling,Thread Safety,N Tier Architecture,在Asp.Net(4.0表单而不是MVC)中,我正在寻找线程安全的最佳实践,以便将作为业务层对象调用的DAL对象的错误消息传递到Asp.Net页面 对我来说,简单地在调用链上抛出异常而被困在页面中似乎是不雅观的(我的直觉是低效的,但我可能错了) 同时,我也不希望必须实例化每一个较低级别的对象,以便在实例方法因某种原因受阻时能够获取非静态消息字段 目前,我有一种混合的方法: Page_Load(Object sender, EventArgs e){ //instantiate non-s

在Asp.Net(4.0表单而不是MVC)中,我正在寻找线程安全的最佳实践,以便将作为业务层对象调用的DAL对象的错误消息传递到Asp.Net页面

对我来说,简单地在调用链上抛出异常而被困在页面中似乎是不雅观的(我的直觉是低效的,但我可能错了)

同时,我也不希望必须实例化每一个较低级别的对象,以便在实例方法因某种原因受阻时能够获取非静态消息字段

目前,我有一种混合的方法:

Page_Load(Object sender, EventArgs e){
    //instantiate non-static class, with non-static methods
    MyClass myClass = new MyClass(); 
    if(!myClass.DoSomething()){
       ErrorLabel.Text = myClass.ErrorMessage;
    }
}
以及:

最后:

public Class MyDalClass{  //non-static class
    ......
    public static void DoSomeDataTricks(){   //static method
       ......
       if(fooBar){
          throw new Exception("Database Error: Cannot Find World Peace.");
       }
    }
 }
据我所知,以上内容在Asp.Net环境中是线程安全的(如果你不这么认为,请告诉我原因),但我觉得必须有更好的方法,特别是在DAL级别


最佳实践?

异常传播应该根本不是问题。因为您已经创建了一个异常,所以将它传播到页面加载的过程中几乎没有开销。我会将DoSomething声明为void并删除try-catch,或者重新抛出异常,以便页面加载能够捕获它。将基于返回值的错误报告和异常抛出结合起来,对于单个调用链来说,这显然是不雅观的。此外,线程安全更多地与共享数据访问有关,而不是静态/实例概念。因此,只要函数以线程安全的方式访问共享数据(如对象成员变量,对于长寿命的线程共享对象等),调用链就可以运行。
public Class MyDalClass{  //non-static class
    ......
    public static void DoSomeDataTricks(){   //static method
       ......
       if(fooBar){
          throw new Exception("Database Error: Cannot Find World Peace.");
       }
    }
 }