Новый 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 в самом конце, и логирование никогда не попадало в цель. Я поставил точку останова на Send, и она так и не попала в цель. Как будто создание электронной почты не удалось, решил выйти из функции вызывающего и продолжил с кодом.

Я не имею ни малейшего понятия, почему.

1 ответ

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

но это не связано с вашей проблемой.

Другие вопросы по тегам