2016-04-11 75 views
0

我是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()方法中發生錯誤,但是異常沒有被捕獲。有人可以建議嗎?

謝謝。

+0

你讀這篇文章在MSDN上? https://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx – Zack

回答

1

您的Task.Run運行在不同的上下文中(您需要在其中嘗試/ catch;或檢查任務是否完成)。您可以更改爲使用async/await。

例子:

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

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

感謝您的答案。我給SendEmailAlert打電話實際上是一個「火災和遺忘」類型。所以我不會是使用TAP設計模式。請提出任何其他方法。 –