我正在尝试编写多线程搜索,然后在任务完成运行后显示所有结果但目前我不明白如果所有任务完成后如何处理结果
我的代码如下:
private async void DoSearchAsync()
{
var productResults = await SearchProductsAsync(CoreCache.AllProducts);
var brochureResults = await SearchBrochuresAsync(CoreCache.AllBrochures);
_searchResults.AddRange(productResults);
_searchResults.AddRange(brochureResults);
ResultsCount = _searchResults.Count;
}
Run Code Online (Sandbox Code Playgroud)
哪里_searchResults
是List<SearchResult>
我的理解是,它将同时执行两个等待,然后将产品添加到搜索结果中.但是,当我在我的控制器中调用它时:
public ActionResult Index(string searchText)
{
SearchHelper helper = new SearchHelper(searchText);
helper.DoSearchAsync();
return View(helper);
}
Run Code Online (Sandbox Code Playgroud)
它在搜索完成之前显示页面,因此没有显示任何结果.如何在显示页面之前等待结果完成?
我已经看了一下,Tasks.Wait
但不知道如何将它应用到上面,因为它需要一系列任务
private Task<List<SearchResult>> SearchProductsAsync(IEnumerable<Product> products)
{
return Task<List<SearchResult>>.Factory.StartNew(() => GetProducts(products));
}
private Task<List<SearchResult>> SearchBrochuresAsync(IEnumerable<Assets> brochures)
{
return Task<List<SearchResult>>.Factory.StartNew(() => GetBrochures(brochures));
}
Run Code Online (Sandbox Code Playgroud)