使用await的DirectorySearcher异步

时间:2020-01-15 23:22:12

标签: c# async-await directorysearcher

我正在使用.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框架(不是核心)中使用它吗?

2 个答案:

答案 0 :(得分:0)

尝试在线程池上运行它。

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

答案 1 :(得分:0)

MS产品都没有这样做。...

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

相关问题