Мне действительно плохо.
У меня есть одно веб-приложение, которое отправляет электронные письма для уведомлений.
Это класс, который содержит базовый метод, отправляющий электронное письмо, подобное этому:
MailMessage email = new MailMessage();
email.To.Add("xxx@gmail.com");
email.Subject = "Test";
email.Body = "t";
SmtpClient client = new SmtpClient();
client.Send(email);
Но у меня есть служба под названием NotificatorService, которая проверяет некоторую логику, и, поскольку это всего лишь «дополнительный», метод для этой службы вызывается в новом потоке. Что я делаю, так это:
public void NotifyMembers(NotificatorClientDTO clientDto) {
if(clientDto == null)
throw new ArgumentNullException("clientDto");
Thread t = new Thread(
() => {
// go to database, verify business rules, etc...
// At the end if it is ok, invoke the method that sends a email
}
t.Start()
}
Если я создаю модульный тест, который создает экземпляр NotificatorService и вызывает notifyMembers с некоторыми данными, код выдаст исключение, но только если я выполню его в отдельном потоке.
Поток, который я создаю, настроен на foregronnd, поэтому система не разрушает мой процесс, я полагаю.
Сообщение об исключении:
SmtpException: невозможно оценить выражение, поскольку код оптимизирован или собственный фрейм находится над стеком вызовов
Я иду к двум внутренним исключениям и вижу это
_message "Тема была прервана." строка
Почему это происходит?
Что вызывает прерывание потока?