【发布时间】:2019-05-26 08:44:45
【问题描述】:
我正在开发一个 ASP.NET MVC WebApi 项目,其中一种方法需要进行 LDAP 搜索。搜索从 LDAP 服务器检索到的信息量确保调用至少需要 7 秒才能完成。该调用使用System.DirectoryServices.Protocols 类和方法,因此是同步且不可修改的。
此 API 将接收的流量相当大(即使 API 在内部网络中),因此每次调用 LDAP 服务器 7 秒并不是一个好主意。所以我想知道这个:
- 将其包装在异步方法中是个好主意吗?
- 异步调用的正确方法是什么? (
await Task.Run(() => Search(params))是一种可接受的方式吗?)
【问题讨论】:
-
Task.Run 在 ASP.Net MVC 中不是一个好主意。每个请求都是它自己的线程,所以无论如何你都不会得到任何东西。
-
如果搜索需要7s,也许您应该每天一次左右将您需要的完整数据同步到您自己的数据库中。而不是查询。
-
使调用异步不会加快客户端的响应时间,它只会(可能)减少服务器上阻塞的线程数量。因此,如果 7 秒有问题,您需要整体更改流程,可能会使用部分 LDAP 结果或类似结果。
标签: c# asp.net-web-api async-await ldap-query