繁体   English   中英

DirectorySearcher 异步使用 await

[英]DirectorySearcher Asynchronous using await

我正在使用 .net 4.7.2(非核心)和 C#。

我需要想出一种方法来不阻止我当前的异步任务,并且我需要搜索用户作为这些任务的一部分。 我之前已经完成了 DirectorySearcher 操作,所以我知道 AD 的附件和第一次搜索可能需要几秒钟,如果我尝试从现有的异步方法调用它,这真的会导致问题。

我发现 DirectorySearcher 有一个“异步”属性。 但我认为它没有异步模式。

        DirectorySearcher ds = new DirectorySearcher();
        ds.Asynchronous = true;
        ds.Filter = "(&(objectclass=user)(samaccountname=testaccount)";
        ds.PropertiesToLoad.Add("samaccountname");
        SearchResult sr = await ds.FindOne();

当然,最后一行会抛出错误,因为 FindOne 不是异步方法。 我已经知道如果我删除等待它会编译。 但这并不能解决我从现有等待方法调用它的问题。 我需要找到一种在 AD 中进行异步搜索的方法...

有谁知道我如何让它在 .net 框架(非核心)中工作?

尝试在线程池上运行它。

private async void MyAsyncMethod()
{
   // do some asynchronous thing
   // await something

   // then, run below on thread pool, which would not block MyAsyncMethod
   Task.Run(() =>
   {
      DirectorySearcher ds = new DirectorySearcher();
      ds.Asynchronous = true;
      ds.Filter = "(&(objectclass=user)(samaccountname=testaccount)";
      ds.PropertiesToLoad.Add("samaccountnamt");
      SearchResult sr = ds.FindOne();
   });
}

供参考: https : //docs.microsoft.com/dotnet/api/system.threading.tasks.task.run

MS 产品都没有做到这一点....

我确实找到了一个名为 ldap4net 的活动 nuget 项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM