new MailAddress()退出方法

时间:2016-07-15 20:34:28

标签: c# email asp.net-mvc-5 mailaddress

我有一个相当奇怪的问题,我无法解决这个问题。所以这是代码:

[HttpGet]
[AllowAnonymous]
public ActionResult SendEmail()
{
    SendRegisterEmail("Test", "Testagain", "lastTest");
    return View("Index");
}

public async Task<bool> SendRegisterEmail(string subject, string message, string to)
{
    var email = new Email();
    var mailAddress = new MailAddress(to);
    email.Subject = subject;
    email.Body = message;
    var mailAddressCollection = new MailAddressCollection();
    mailAddressCollection.Add(mailAddress);
    email.To = (mailAddressCollection);

    return await Send(email);
}

现在为了证明我的问题,我将代码分解成单行,这样我就可以看到它在哪一行上断。这是我发现的:

当我调试此问题并进入SendRegisterEmail方法时,显示var mailAddress = new MailAddress(to);行,然后退出该函数并运行行return View("Index");并加载页面起来。奇怪的是我在最后添加了一个日志记录方法,并且记录永远不会被命中。我在Send上放了一个断点,它从未被击中。就像电子邮件的创建崩溃一样,决定退出调用函数并继续使用代码。

我不知道为什么会有最微弱的线索。

1 个答案:

答案 0 :(得分:2)

SendRegisterEmail方法是异步的,你不是在等待它。

目前,您启动了“即发即弃”操作,并在创建新的return View实例时执行MailAddress指令。 最有可能的是throws FormatException你无法捕获,因为异常是在另一个线程中引发的。

将您的操作方法更新为

public async Task <ActionResult> SendEmail()
{
    await SendRegisterEmail("Test", "Testagain", "lastTest");
    return View("Index");
}

在真正需要返回之前还等待,您可以将其更改为

public Task<bool> SendRegisterEmail(string subject, string message, string to)
{
    var email = new Email();
    // ... 
    return Send(email);
}

但这与你遇到的问题无关。