CLR 4.0中的新内容 状态错乱异常

开发 后端
CLR4.0针对未捕获异常做了一种可配置的处理机制。请看下面的文章介绍。

状态错乱异常

有人叫它超级异常. 指的是未捕获异常, 打乱了程序的状态, 引起程序崩溃, 或者导致不想看到的程序行为, 如同神经错乱. CLR4.0针对未捕获异常做了一种可配置的处理机制. 请看下面的程序. 在CLR2.0里, 这个catch (Exception ex) 将所有可能发生的异常都捕获. 在CLR4.0里, 默认情况下这个超级catch不会生效, 一旦出现异常就会导致程序停止.

class Program
{
    static void Main(string[] args)
    {
        SaveFile("file.txt");
        Console.ReadLine();
    }
    public static void SaveFile(string fileName)
    {
        try
        {
            FileStream fs = new FileStream(fileName, FileMode.Create);
        }
        catch (Exception ex)
        {
            Console.WriteLine("File open error");
            throw new IOException();
        }
    }
}

因为存在某些特殊情况, 需要改变默认的策略. CLR 4.0提供了两种定制的手段

[HandleProcessCorruptedStateExceptions]方法标注(Method attribute)

在需要超级catch的方法前面加上这个标注.就可以让超级catch生效, 如下:

[HandleProcessCorruptedStateExceptions]
public static void SaveFile(string fileName)
{
    try
    {
        FileStream fs = new FileStream(fileName, FileMode.Create);
    }
    catch (Exception ex)
    {
        Console.WriteLine("File open error");
        throw new IOException();
    }
}

 

注:这个方式只能在此方法内生效. 在其它地方还是按CLR4.0的默认方式处理。config配置文件如果想在整个应用级改变这个策略, 就在config配置文件中写上

<?xml version="1.0"?>
<configuration>

  <runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true"/>
  </runtime>
</configuration>

 

【编辑推荐】

  1. 在CLR之上的构建领域特定语言
  2. 探秘CLR 4.0中的代码契约
  3. ASP.NET全局异常处理浅析
责任编辑:彭凡 来源: www.cnblogs.com/mikelij/
相关推荐

2009-03-11 10:29:23

代码契约.NETCLR

2010-01-05 09:26:13

.NET 4.0

2009-07-24 17:22:22

CLR 4.0安全模型

2013-08-27 15:03:18

PowerShell

2009-10-20 15:03:29

ExpandoObje

2009-08-10 18:16:33

ICustomQuer.NET 4.0

2009-10-19 14:25:16

静态构造函数

2009-09-03 14:26:17

Jit编译

2018-11-15 14:05:24

MongoDB数据库事务

2011-01-14 10:27:18

C#.netasp.net

2009-09-04 16:28:05

ASP.NET 4.0

2023-03-30 14:45:51

工业4.0物联网

2009-08-19 16:51:14

C# 4.0 dyna

2010-08-05 13:08:44

Eclipse SDKEclipse E4

2009-05-26 09:28:22

C# 4.0dynamic动态类型

2009-12-30 10:21:36

.NET 4.0

2011-04-08 17:53:33

OSPF

2023-11-29 15:53:45

2018-08-20 16:25:48

编程语言Java异常处理

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud
点赞
收藏

51CTO技术栈公众号