SmtpClient异步SendAsync发送邮件,进程退出时怎么保证邮件发送完成

qq374494848 2016-12-26 11:08:32
RT
经测试,SendAsync后直接退出进程邮件没有发送出去
...全文
466 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2016-12-26
  • 打赏
  • 举报
回复
因为async调用时所启用的线程,是线程池的线程。 而线程池的线程,是后台线程。 所谓后台线程,是进程退出后,立即退出的线程。 所以邮件有可能还没发出去线程就被关闭了。 解决的方法: 1、系统退出时,你自己增加判断,比如使用待发数累计,发送成功+失败累计数,在程序退出时判断两个累计数相等,系统才能退出。 2、不要用async调用,使用同步调用。然后自己手动开启Thread线程,来进行邮件发送。手动开启的线程,是前台线程,在进行退出时,会等待线程执行完成后,进行才彻底退出。
qq374494848 2016-12-26
  • 打赏
  • 举报
回复
引用 1 楼 daixf_csdn 的回复:
因为async调用时所启用的线程,是线程池的线程。 而线程池的线程,是后台线程。 所谓后台线程,是进程退出后,立即退出的线程。 所以邮件有可能还没发出去线程就被关闭了。 解决的方法: 1、系统退出时,你自己增加判断,比如使用待发数累计,发送成功+失败累计数,在程序退出时判断两个累计数相等,系统才能退出。 2、不要用async调用,使用同步调用。然后自己手动开启Thread线程,来进行邮件发送。手动开启的线程,是前台线程,在进行退出时,会等待线程执行完成后,进行才彻底退出。
有没有类似Flush的方法,在我进程退出时调用下,将所有未发送邮件发出去 或者 调SendAsync后等待它执行完,再往下走
qq374494848 2016-12-26
  • 打赏
  • 举报
回复
有没有类似Flush的方法,在我进程退出时调用下,将所有未发送邮件发出去 或者 调SendAsync后等待它执行完,再往下走

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧