Ben*_*ter 2 .net c# asynchronous task-parallel-library async-await
根据这篇文章,我们不应该提供异步实现的同步包装器.
我们已经抽象了System.Net.SmtpClient一个接口,以便我们可以轻松测试发送电子邮件的代码.
由于SmtpClient实际上同时具有异步和同步实现,我们是否应该公开这两个实现,或者只是希望我们的ISmtpClient接口的任何使用者只是Wait我们的异步SendAsync方法.
在构建通用库时,不确定这里的准则是什么.在我们的例子中,我们知道我们需要同时使用异步和同步版本.
如果您的消费者需要异步和同步版本,并且您可以提供那些,那么您应该.不要强迫您的消费者通过异步进行同步,这会损害性能并最终导致死锁.
你可以在.Net像SemaphoreSlim(Wait/WaitAsync)或TPL Dataflow(Post/SendAsync)这样的库中看到很多这样的例子.几乎总是当有异步选项时,还有一个同步选项.唯一可以回忆起只存在异步版本的情况WinRT,但那是因为它们阻止了长时间的同步调用.
正如Ned Stoyanov所提到的,Toub的文章更多地是关于包装器,而不是真正的同步/异步操作.
| 归档时间: |
|
| 查看次数: |
418 次 |
| 最近记录: |