c# - 以异步方式调用同步方法?

标签 c# asp.net-web-api async-await ldap-query

<分区>

我正在开发一个 ASP.NET MVC WebApi 项目,其中一种方法需要进行 LDAP 搜索。搜索从 LDAP 服务器检索的信息量确保调用至少需要 7 秒才能完成。该调用使用 System.DirectoryServices.Protocols 类和方法,因此是同步且不可修改的。

此 API 将接收的流量相当大(即使 API 位于内部网络中)因此每次调用 LDAP 服务器 7 秒不是一个好主意。所以我想知道这个:

  • 用异步方法包装它是个好主意吗?
  • 异步调用的正确方法是什么? (await Task.Run(() => Search(params)) 是一种可接受的方式吗?)

最佳答案

如评论中所述,我完全看不出使调用异步会有什么帮助。在另一个线程中运行它并等待(根据您的“什么是正确的方法......”问题)确实使用与同步调用和等待一样多的资源。

但是请注意,System.DirectoryServices.Protocols类如 LdapCollection对旧的 APM(异步编程模型)样式(例如 BeginSendRequest / EndSendRequest )确实有异步支持。

您可以使用 TaskFactory<TResult>.FromAsync 轻松地将 APM 样式的 API 包装为可等待的基于任务的样式,这将是将这些类与异步一起使用的“正确方法”。另见 Interop with Other Asynchronous Patterns and Types .

关于c# - 以异步方式调用同步方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53959976/

相关文章:

C# - XmlNamespaceManager 存在于 'System.Xml.ReaderWriter' (...) 和 'System.Xml (...)'

c# - 尝试保存图像时未处理访问冲突异常

asp.net-web-api - 从 ASP.NET 5 Web API 引用可移植类库 (PCL)

c# - 长时间运行的任务与线程——性能

javascript - 在函数参数中使用 await

c# - 如何在 RichTextBox [C#] 中进行语法高亮显示?

c# - 关键字 'Distinct' 附近的语法不正确

c# - Odata v4 和 Entity Framework 中的计算属性

asp.net-mvc - 使用一种识别服务保护 2 个不同的 Web 应用程序

Python 异步/aiohttp : ValueError: too many file descriptors in select() on Windows