gpt4 book ai didi

c# - 我们是否应该同时提供 SmtpClient 包装器的异步和同步实现?

转载 作者:行者123 更新时间:2023-11-30 19:09:39 25 4
gpt4 key购买 nike

根据 this文章,我们不应该提供异步实现的同步包装器。

我们已经抽象出接口(interface)后面的 System.Net.SmtpClient,以便我们可以轻松地测试发送电子邮件的代码。

由于 SmtpClient 实际上同时具有异步和同步实现,我们是否应该公开这两种实现,或者只是期望我们的 ISmtpClient 接口(interface)的任何消费者只是等待 我们的异步 SendAsync 方法。

在构建通用库时不确定这里的指导方针是什么。在我们的例子中,我们知道我们需要同时使用异步和同步版本。

最佳答案

如果您的消费者同时需要异步和同步版本,而您可以提供它们,那么您应该不要强制您的消费者通过异步进行同步,这会损害性能并可能导致死锁。

你可以在 .Net 库中看到很多这样的例子,比如 SemaphoreSlim (Wait/WaitAsync) 或 TPL Dataflow (Post/SendAsync)。几乎总是在有异步选项时也有同步选项。我能记得的唯一一个只有异步版本的情况是在 WinRT 中,但那是因为 they are discouraging long sync calls .


正如 Ned Stoyanov 提到的,Toub 的文章更多地是关于包装器,而不是真正的同步/异步操作。

关于c# - 我们是否应该同时提供 SmtpClient 包装器的异步和同步实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285499/

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