AppDomain.CurrentDomain.ProcessExit不执行Console.WriteLine

时间:2012-09-09 18:21:58

标签: c# appdomain

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace empty
{
    class Program
    {
        static Program()
        {
            AppDomain.CurrentDomain.ProcessExit += ExitHandler;
        }
        static void Main(string[] args)
        {
        }
        static void ExitHandler(object o, EventArgs args)
        {
            using (FileStream fs = new FileStream("file.bin", FileMode.Create))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, new double[30000000]);         
            }
            using (FileStream fs = new FileStream("file.bin", FileMode.Create))
            {
                BinaryFormatter bf = new BinaryFormatter();
                bf.Serialize(fs, new double[30000000]);
            }
            Console.WriteLine("end");
        }
    }
}

我希望得到输出: "端" 但一无所获。我做错了什么?

我故意使用2个序列化,因为1序列化不会发生这种行为。

1 个答案:

答案 0 :(得分:4)

如果你看the documentation for ProcessExit,你会发现:

  

所有ProcessExit事件处理程序的总执行时间都是有限的,就像所有终结器的总执行时间在进程关闭时受限一样。默认值为两秒。

因此,如果您在该处理程序中执行的任何操作花费的时间超过两秒,那么它将不会完全执行。这似乎正是你遇到的问题。