Итак, есть несколько отличных примеров в сети, как использовать Mailkit для отправки электронной почты через SMTP.Mailkit Как отправить и проверить aysynchronous SMTP
Обычно заканчивается:
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.Send(emailMessage);
client.Disconnect(true);
Однако это не хорошо, если асинхронной требуется:
client.Authenticate(theSMTPUsername,theSMTPPassword);
client.SendAsync(emailMessage);
client.Disconnect(true);
Однако то, что я хотел бы знать, когда асинхронная Отправить завершена, или если это не получается. В .Net родных библиотеках это достигается с помощью обратного вызова (обработчик событий).
Возможно ли определить обработчик обратного вызова «Завершено» для MailKit SendAsync, а если нет, то лучше всего обнаружить, удалось ли это или нет.
Благодаря
Спасибо за бычка. Ожидание лучше, чем обратный вызов. – Hughgo
Смотря чуть ближе, я не уверен, что решение будет работать. Ожидание асинхронного вызова будет только ждать возвращения части Async. Это не будет ждать отправки сообщения. Приведенный выше код может участвовать в гонке и отключать до завершения работы. Лучшим способом сделать это было бы ожидание * синхронных * API. Это гарантирует, что каждый этап будет выполнен до продолжения. – Hughgo
Когда 'client.Send()' возвращается, сообщение будет отправлено. Аналогично, когда управление возобновляется после 'wait client.SendAsync()', сообщение будет отправлено. Не будет никакой гонки. Синхронный API не может «ждать». – jstedfast