我有以下代码:
try
{
await Task.Run(() => myAppClient.CreateResourceRecord());
}
catch (MyApplicationException dnsException)
{
// Exception code
}
在MyApplicationException
期间抛出myAppClient.CreateResourceRecord()
但它没有在catch(MyApplicationException dnsException)语句中捕获。
怎么解决?
答案 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");
}
}
}
输出:
抓住了异常
答案 1 :(得分:-2)
请记住Task
在另一个线程中工作,因此异常也会在另一个线程中抛出。要从Task
捕获异常,请尝试以下方法:
try
{
await Task.Run(() => myAppClient.CreateResourceRecord());
}
catch (AggregateException ae)
{
ae.Handle((x) =>
{
if (x is MyApplicationException)
{
// Exception code
}
});
}