Ind*_*ent 2 c# multithreading exception-handling try-catch
我尝试放置一个异常逻辑,系统的一部分可以回退到意外的行为.
这项工作应该由一个新类来完成,该类继承Exception对象并使用新的"退出"扩展功能,该退出包括对用户的错误信号和日志记录例程.
我可能需要了解throw更好的使用,但我可以通过以下方式使其相当透明:
public SomeObject GetVersion(byte p)
{
switch ((SomeObject)p)
{
case Version.SomeType1:
...
break;
case Version.SomeType2:
...
break;
default:
throw new UnexpectedQueryException(this.someOtherObject, errorCode);
}
return (SomeObject)p;
}
Run Code Online (Sandbox Code Playgroud)
我想你可以看到我在这里想做什么.
当应用程序无法提供请求时,我会尝试抛出.throw用于通过异常执行执行(为调用者生成足够的错误代码).这个例子是"我知道你给我一个9但这里只允许1-8"的类型的错误,"errorCode进一步发送给UnexpectedQueryException(...).
不幸的是,应用程序将throw作为未处理并关闭我的Thread并且应用程序在重新启动之前将无法运行.除了这种情况,我也使用这个抛出catch语句.
在我看来,这是非常有效的.
这里有什么最佳做法?
我希望异常处理能够在不同场景(如上所述)上"回退",因此我总是有一种简单的方法将错误传达给用户(这意味着我可以发送有关异常位置的非常准确的信息) ).
此外,我当然希望应用程序继续工作.
Exception逻辑中的一部分代码,
public class UnexpectedQueryException: CommunicationException
{
public UnexpectedQueryException(SomeObject object, ErrorCode errorCode) : base("UnexpectedQueryException", object, errorCode)
{
.........
}
}
Run Code Online (Sandbox Code Playgroud)
反过来,它继承了基本的Exception对象,
public class CommunicationException : Exception
{
..some fields..
public CommunicationException(string Message, SomeObject object, ErrorCode errorcode)
{
.....
}
public CommunicationException() : base("CommunicationException")
{ }
}
Run Code Online (Sandbox Code Playgroud)
如果你在代码中抛出一个异常,你需要抓住它并用它做一些事情 - 如果你没有,你还没有处理它.
如果你扔进一个catch街区,同样的事情适用.你抛出了一个异常,它将继续传播直到找到合适的catch块.如果不存在,则未处理.
您需要构建更高级别的(UI)代码,以便捕获正确类型的异常并将您想要的信息传达给用户:
try
{
// code that can throw
}
catch(VerySpecificException ex)
{
// communicate to user details about VerySpecificException.
// possibly log.
// Do not re-throw or throw a new excpetion as it is now handled.
}
catch(AnotherSpecificException ex)
{
// communicate to user details about AnotherSpecificException.
}
catch(LessSpecificException ex)
{
// communicate to user details about LessSpecificException.
}
catch(EveLessSpecificException ex)
{
// communicate to user details about EvenLessSpecificException.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15369 次 |
| 最近记录: |