Один из подходов заключается в изменении поведения SendEmail
и его имени, чтобы оно фактически не отправляло электронное письмо.Добавляет запрос на отправку электронного письма в очередь.Ваш вызов метода может выглядеть следующим образом:
service.QueueEmail(someData);
Нет необходимости в том, чтобы это было асинхронным (и бесполезным), потому что все, что вы делаете, - это добавление чего-либо в очередь.Отдельный процесс читает из очереди и отправляет электронные письма.
Это приведет к тому, что ваш сервис станет более сфокусированным.Более подробный код, который знает, как отправить электронное письмо, будет жить в другом месте.Затем этот код может обрабатывать эту сложность более эффективно.Например, он может включать логику повторных попыток.И поскольку у вас есть другие процессы в вашем приложении, которые отправляют электронные письма, они могут повторно использовать этот процесс.