使用System.DirecoryServices.DirectorySearcher时,如何确定是否发生ClientTimeOut或搜索自然返回了空的SearchResultCollection?

给出以下代码段

 using (var searcher = new DirectorySearcher(adRoot))
                        {
                            searcher.Filter = "SomeFilter";
                            searcher.PropertiesToLoad.Add("givenname");
                            searcher.PropertiesToLoad.Add("sn");
                            searcher.PropertiesToLoad.Add("department");
                            searcher.PropertiesToLoad.Add("samaccountname");
                            searcher.ClientTimeout = TimeSpan.FromSeconds(10);

                            using (var results = searcher.FindAll())
                            {
                               //haldle results
                            }
                        }
                    }

最佳答案

仅当将Asynchronous属性设置为true时,设置ClientTimeout才有用。你没有做。非托管IDirectorySearcher界面的文档更加详细。从the MSDN article:



请注意,使用托管类时,这种“对情况的某种控制”并不完美。实际上,SearchResultCollection包装器类没有为您提供一种干净的异步搜索方式,它没有“BeginMoveNext”方法来迭代下一个结果。 “完成其他任务”的角度是理论上的。最好不要使用该属性(property)。

09-27 14:13