我在.net 4.5中有一个C#wcf Windows服务,每天向大约1000个不同的客户发送电子邮件。我想尝试使用我在这里找到的代码片段来发送电子邮件异步,但是如何将其包装以捕获异常?
public async Task SendAsync(string subject, string body, string recipient)
{
var mailMessage = new MailMessage("me@example.com", recipient, subject, body);
mailMessage.IsBodyHtml = true;
using(var client = new SmtpClient("mysmtpserver"))
{
try
{
await client.SendMailAsync(mailMessage);
}
catch (Exception ex)
{
// Log here
}
}
}
我期待无效电子邮件地址和服务器超时的例外情况。
我应该在try-catch中包装await Call吗?不确定这会有效。
在哪里放置贯穿所有邮件地址的foreach循环的最佳位置?
感谢。
答案 0 :(得分:4)
我应该在try-catch中包装await Call吗?不确定这会有效。
是的,<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@android:style/Theme.Holo.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
<item name="android:background">#FF0000</item>
</style>
</resources>
传播异常,这将有效。当然,许多邮件传递失败发生在邮件离开您的服务器并且您得到反弹甚至什么也没有。无论您如何发送邮件,都无法检测到。
在哪里放置遍历所有邮件地址的foreach循环的最佳位置是什么?
不确定你的意思。将循环放在await
的呼叫周围?它还能去哪儿?我可能会误解。
答案 1 :(得分:1)
我知道这是一个旧帖子,已经回答了,但我可以使用此方法捕获await
个来电。
public async Task < JsonResult > UserDelete(string username) {
// return obj
MFFCommon retval = new MFFCommon();
// get user
var user = UserManager.FindByName(username);
// starts a task
Task removeUserFromAgency = await Task.Factory.StartNew(async() => {
await removeUserFromCurrentAgency(user);
});
// optional, but this will wait 3 sec before checking if it is complete.
removeUserFromAgency.Wait(3000);
if (removeUserFromAgency.IsCompleted) {
retval.taskResponse = "True";
retval.taskError = null;
return Json(retval, JsonRequestBehavior.AllowGet);
} else {
// This is where the exception is at.
retval.taskResponse = "False";
retval.taskError = removeUserFromAgency.Exception.Message;
return Json(retval, JsonRequestBehavior.AllowGet);
}
}
&#13;