多线程/异步请求,等待它们全部完成,然后处理结果

Mic*_*hel 5 c# asp.net multithreading

我(想要)对多个来源执行搜索请求.现在我已经完成了一些多线程,但这一切都是火上浇油而忘记了.

现在我想要做的是,在3个不同的对象上提出3个相同的请求,等到它们全部"完成"(这给了我第一个问题:他们怎么说'我已经完成',然后收集所有数据都是我发给我的.

所以在伪代码中我有这个界面:

interface ISearch
    SearchResult SearchForContent(SearchCriteria criteria)
Run Code Online (Sandbox Code Playgroud)

所以在代码中我创建了三个搜索服务:

ISearch s1 = new SearchLocal();
ISearch s2 = new SearchThere();
ISearch s3 = new SearchHere();
Run Code Online (Sandbox Code Playgroud)

然后SearchForContent(SearchCriteria criteria)以多线程/异步方式调用它们中的所有三个

他们都和他们一起回到我身边,SearchResult在他们全部完成之后,我处理他们的SearchResult 对象.

我希望这些文字可以让你得到我脑子里的东西:)

我正在开发一个ASP.Net 3.5 C#项目.

Ali*_*tad 6

创建AutoResetEvent并传递给他们WaitHandle.WaitAll()

有一个例子在这里.

基本上:

1)您AutoResetEvent为每个搜索创建一个并传递false给它的构造函数.

2)创建的线程并运行搜索每一个,并在结束时,调用SetAutoResetEvent最后块.调用Set是在finally块内完成非常重要的,否则WaitAll()将无限期地等待.

3)在您生成线程后的代码中,您调用WaitHandle.WaitAll()并将所有这些线程传递AutoResetEvent给它.此代码将等待所有内容完成.