1

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

[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 上放了一个断点,它从未被击中。就好像电子邮件的创建崩溃了,决定退出到调用者函数并继续执行代码。

至于为什么,我没有最微弱的线索。

4

1 回答 1

2

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

目前,您启动了一个即发即弃的操作,并return View在您创建新MailAddress实例时执行指令。很可能它会抛出 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);
}

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

于 2016-07-15T20:38:57.183 回答