处理异常+等待

时间:2014-06-30 13:26:37

标签: c# exception async-await

我有以下代码:

try
{
     await Task.Run(() => myAppClient.CreateResourceRecord());
}
catch (MyApplicationException dnsException)
{
   // Exception code
}

MyApplicationException期间抛出myAppClient.CreateResourceRecord()但它没有在catch(MyApplicationException dnsException)语句中捕获。 怎么解决?

2 个答案:

答案 0 :(得分:1)

基于@ usr的评论:

通过运行这个小但完整的控制台应用程序示例可以看出,异常会被捕获。

class Program
{
    static void Main(string[] args)
    {
        var t = foo();
        t.Wait();
        Console.ReadKey();
    }

    class MyApplicationException : Exception { }

    static async Task foo()
    {
        try
        {
            await Task.Run(() => { throw new MyApplicationException(); });
            Console.WriteLine("Completed without exception");
        }
        catch (MyApplicationException)
        {
            Console.WriteLine("Exception caught");
        }
    }
}

输出:

抓住了异常

请参阅:http://dotnetpad.net/ViewPaste/dJQgaYiqtEqqGTCiZJjdgw

答案 1 :(得分:-2)

请记住Task在另一个线程中工作,因此异常也会在另一个线程中抛出。要从Task捕获异常,请尝试以下方法:

try
{
    await Task.Run(() => myAppClient.CreateResourceRecord());
}
catch (AggregateException ae)
{
    ae.Handle((x) =>
    {
        if (x is MyApplicationException)
        {
            // Exception code
        }
    });
}