2016-04-11 33 views
0

TPL için yeni. SendEmailAlert() yöntemi herhangi bir hata attığında istisna tutmam gerekiyor. Aşağıdaki kod doğru mu lütfen? Görevdeki özel durum istisnası

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

I() istisna yakalanma değildir method.But SendEmailAlert içinden bir hata zorladı. Birisi tavsiye edebilir mi?

Teşekkürler.

+0

MSDN üzerindeki bu yazıyı okudunuz mu? https://msdn.microsoft.com/en-us/library/dd997415(v=vs.110).aspx – Zack

cevap

1

Task.Run'unuz farklı bir bağlamda çalışır (bunun içinde bir try/catch'a sahip olmanız veya görevinizin yapılıp yapılmadığını kontrol etmeniz gerekir). Async/wait'i kullanmak için değiştirebilirsiniz.

Örnek:

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

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

Cevabınız için teşekkürler. SendEmailAlert çağrısı aslında bir "yangın ve unut" tipidir. TAP tasarım modelini kullanarak. Lütfen başka herhangi bir yaklaşım önerin. –