为什么我的Async方法调用异常未被捕获

时间:2011-12-10 16:29:07

标签: c# multithreading delegates

我认为如果我用try catch包装EndInvoke调用,如果抛出错误,那么我的catch块会处理它吗?我一定做错了什么?必须是用户错误,只是不确定是什么?

修改 当我运行停止应用程序时,我得到了“用户代码未处理的异常”。如果我单步执行代码,我会看到它,然后它将转到catch块。但是,我希望catch块能够处理这个并且看不到正在停止应用程序的未处理异常?

任何建议表示赞赏。

class Program
{

    static void Main(string[] args)
    {


       Action myMethod = new Action(Program.FooOneSecond);

        Go("Go Method");

        IAsyncResult tag =
            myMethod.BeginInvoke(null, "passing some state");

        try
        {
            myMethod.EndInvoke(tag);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }

        string strState = (string)tag.AsyncState;

        Console.WriteLine("State When Calling EndInvoke: "
            + tag.AsyncState.ToString());


        Console.Read();
    }

    static int Work(string s) { return s.Length; throw null; }

    static void Go(string s) 
    {
        Console.WriteLine(s);
    }

    static void FooOneSecond()
    {
        // sleep for one second!
        Thread.Sleep(1000);
        // throw an exception
        throw new Exception("Exception from FooOneSecond");
    } 
}

1 个答案:

答案 0 :(得分:1)

我刚刚运行了你的代码,每次都会抓住异常......