gpt4 book ai didi

c# - 如何在多线程应用程序中安全地使用 SmtpClient.SendAsync

转载 作者:太空宇宙 更新时间:2023-11-03 20:00:47 26 4
gpt4 key购买 nike

在我的应用程序中,我使用 Dataflow 库中的 ActionBlock,使用 SmtpClient.SendAsync() 发送电子邮件警报方法,它不会阻止调用线程。(ActionBlockBufferBlock 获取数据, block 使用 bufferBlock.LinkTo(actionBlock)).但是,如果正在进行另一个 .SendAsync() 调用,此方法将抛出 InvalidOperationException

根据 MSDN documentation ,发送操作完成时会引发 public event SendCompletedEventHandler SendCompleted

我如何确保 ActionBlock 产生的线程(或 Tasks)之间的竞争不会导致抛出 InvalidOperationException

到目前为止,我的一个想法是在我的类(发送电子邮件)中添加围绕 SendAsync() 调用的私有(private)锁和将分配给 SendCompleted< 的私有(private)函数 事件。当线程到达 SendAsync() 时它获得锁,当事件被引发时,私有(private)函数解锁锁,允许其他线程获得锁,并继续。

最佳答案

为每个发送操作创建一个SmtpClient。这样就不需要同步任何东西。只需将其包含在 using 中即可清理。

关于c# - 如何在多线程应用程序中安全地使用 SmtpClient.SendAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28636168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com