我正在尝试编写一个多线程搜索,然后在任务完成后显示所有结果,但目前我不知道在所有任务完成后如何处理结果。
我的代码如下:
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;
}
在这里,_searchResults
是一个 List<SearchResult>
我的理解是它会同时执行两个 await 并将产品添加到搜索结果中。然而,当我在我的控制器中调用它时:
public ActionResult Index(string searchText)
{
SearchHelper helper = new SearchHelper(searchText);
helper.DoSearchAsync();
return View(helper);
}
它在搜索完成之前显示页面,因此没有结果显示。如何使其在显示页面之前等待结果完成?
我已经研究了 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));
}
Task.Factory.StartNew
。GetProducts
函数是在做什么? - Stephen Cleary