來捕獲異常我有幾個方法已經同步發送電子郵件。有沒有辦法使用System.Net.Mail.SendAsync()
如果電子郵件失敗,我用這個相當標準代碼:
static void CheckExceptionAndResend(SmtpFailedRecipientsException ex, SmtpClient client, MailMessage message)
{
for (int i = 0; i < ex.InnerExceptions.Length -1; i++)
{
var status = ex.InnerExceptions[i].StatusCode;
if (status == SmtpStatusCode.MailboxBusy ||
status == SmtpStatusCode.MailboxUnavailable ||
status == SmtpStatusCode.TransactionFailed)
{
System.Threading.Thread.Sleep(3000);
client.Send(message);
}
}
}
不過,我試圖達到使用SendAsync()基本相同。這是我到目前爲止的代碼:
public static void SendAsync(this MailMessage message)
{
message.ThrowNull("message");
var client = new SmtpClient();
// Set the methods that is called once the event ends
client.SendCompleted += new SendCompletedEventHandler(SendCompletedCallback);
// Unique identifier for this send operation
string userState = Guid.NewGuid().ToString();
client.SendAsync(message, userState);
// Clean up
message.Dispose();
}
static void SendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Get the unique identifier for this operation.
String token = (string)e.UserState;
if (e.Error.IsNotNull())
{
// Do somtheing
}
}
的問題是使用令牌和/或e.Error我怎麼得到的異常,這樣我可以做出的StatusCode必要的檢查,然後重新發送?
我一直在谷歌搜索整個下午,但沒有發現任何積極的。
任何意見讚賞。
繼承人關於異步異常處理的帖子 - 可能會暗示發生了什麼! http://stackoverflow.com/questions/5383310/catch-an-exception-thrown-by-an-async-method – bUKaneer 2013-02-28 15:14:44
'e.Error' *是例外。如果已分配,則出現問題,然後您可以調查異常屬性。 – James 2013-02-28 15:17:16