SmtpClient SendAsync в .NET 3.5 - PullRequest
       14

SmtpClient SendAsync в .NET 3.5

3 голосов
/ 11 января 2012

Этот вопрос о SmtpClient в .NET 3.5.Мне известно об изменении утилизации в .NET 4, но в настоящее время перенос не возможен.

Мне интересно, что произойдет с smtpclient, если вы используете sendasync, а smtpclient выходит из области видимости.Пример:

public void SendSomething(){
    SmtpClient smtp = new SmtpClient(...);
    smtp.SendCompleted += SendCompletedCallback;
    smtp.SendAsync(...);
}

private void SendCompletedCallback(object sender, AsyncCompletedEventArgs e){
...
}

Что происходит, если вы отправляете что-то подобное, объект выходит из области видимости в методе, а smtpclient немного медленный и только сейчас начинает фактическую отправку: это вызывает какие-либо проблемы?Или smtpclient защищает себя от сбора мусора и т. Д.?

Согласно документации msdn, вы не можете выполнить sendasync, пока еще не завершена другая sendasync.Но что произойдет, если вы создадите два smtpclients и выполните sendasync одновременно (например, два потока вызывают метод SendSomething () одновременно).Может ли он справиться с этим или он создаст проблемы?

Еще один вопрос: в настоящее время в .NET 3.5 клиент smtp не отправляет команду quit после завершения.Это исправлено в .NET 4 с помощью dispose.Однако насколько эта ошибка плоха: вызывает ли она проблемы на серверах smtp, если команда quit не отправлена?Или это то, с чем они должны справиться?

1 Ответ

2 голосов
/ 11 января 2012

Пока выполняется асинхронная операция, на SmtpClient ссылается фрейм метода или делегат обратного вызова.
Не беспокойтесь об этом.

Несколько SmtpClient с не будут мешатьс друг другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...