处理任务中的异常

时间:2016-04-11 21:53:10

标签: c# task-parallel-library

我是TPL的新手。 我需要在SendEmailAlert()方法抛出任何错误时处理异常。请注意以下代码是否正确?

public Task MyMethod()
{
    DoSomething();

    try
    {   
        string emailBody = "TestBody";
        string emailSubject = "TestSubject";

        Task.Run(()=> SendEmailAlert(arrEmailInfo));
    }
    catch (AggregateException ex)
                {
                    ex.Handle((e) =>
                       {
                           log.Error("Error occured while sending email...", e);
                           return true;
                       }
                       );
                }

}

private void SendEmailAlert(string[] arrEmailInfo)
{
    MyClassX.SendAlert(arrEmailnfo[0], arrEmailnfo[1]);
}

我在SendEmailAlert()方法中强制出错。但是异常没有被捕获。有人可以建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

你的Task.Run在不同的上下文中运行(你需要在其中使用try / catch;或者检查任务是否完成)。您可以更改为使用async / await。

示例:

public async void MyMethod()
{
    try
    {
        await ExceptionMethod();
    }
    catch (Exception ex)
    {
        // got it
    }
}

public async Task ExceptionMethod()
{
    throw new Exception();
}