2016-04-11 13 views
0

Ich bin neu bei TPL. Ich muss eine Ausnahme behandeln, wenn die SendEmailAlert() - Methode einen Fehler auslöst. Ist der folgende Code bitte korrekt?Ausnahmebedingung in Task

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]); 
} 

ich gezwungen, einen Fehler aus SendEmailAlert() method.But wird die Ausnahme nicht erwischt zu werden. Könnte jemand beraten?

Danke.

+0

Sie diesen Artikel auf MSDN gelesen haben? https://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx – Zack

Antwort

1

Ihr Task.Run läuft in einem anderen Kontext (Sie müssten versuchen/fangen darin oder überprüfen Sie, ob die Aufgabe erledigt ist). Sie könnten ändern, um async/await zu verwenden.

Beispiel:

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

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

Danke für die Antwort. Mein Anruf an SendEmailAlert ist eigentlich ein "Feuer und vergessen" -Typ .So werde ich nicht sein Verwenden Sie TAP Design Pattern. Bitte schlagen Sie einen anderen Ansatz vor. –

Verwandte Themen