我正在开发一个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包装为可等待的基于任务的样式,这是将这些类与async一起使用的“正确方法”。另请参见与其他异步模式和类型互操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句