public async Task<List<T1>> StartSearchAsync()
{
....other code
searchRequests.ForEach(async s => {
products.AddRange(await SinglePageSearch(s));
});
return products;
}
您的await
位于一个lambda表达式中,该表达式完全是startSearchAsync
方法的另一个函数。
事实上,您不应该将异步
委托传递给列表
,因为这样会将委托转换为异步void
,这是不可取的,因为调用方法不能等待委托完成。
更好的选择是使用enumerable.select
,结合使用task.whenall
:
public async Task<List<T1>> StartSearchAsync()
{
....other code
var tasks = searchRequests.Select(SinglePageSearch);
var results = await Task.WhenAll(tasks);
foreach (result in results) products.AddRange(result);
return products;
}
使用这种方法,Task.WhenAll
枚举Select
生成的任务
,并创建另一个任务
,该任务在每个SinglePageSearch
完成时完成。
现在StartSearchAsync
可以等待
它们的完成。
如果products
只是一个用于合并结果的空列表,则可以进一步简化:
public async Task<List<T1>> StartSearchAsync()
{
....other code
var results = await Task.WhenAll(searchRequests.Select(SinglePageSearch));
return results.SelectMany(x => x).ToList();
}
我有一个接口,其中包含一些返回的函数。实现接口的一些类不需要等待任何东西,而其他类可能只是抛出--因此警告是虚假的和令人讨厌的。
我猜我的代码有很多薄弱点,所以请随时分享任何想法。顺便问一下,我的主要问题是,当我尝试执行以下操作时,以及在最后,当我希望等待所有任务(通过使用task.waitall)完成以检查是否存在任何异常时,是否真的会因为缺少'await'操作符而使代码的任何部分同步运行? 完整的来源,如果需要进一步的信息。也许还值得一提的是,我使用的是.NET5.0。
警告试着告诉我什么?我该怎么办? 这是我的代码:它是否使用多线程运行?
我知道我可以通过等待来修复它,但对于只执行一些廉价操作的方法来说,这感觉不对。这听起来也会给执行增加不必要的开销,但我也不确定这是否已经存在,因为存在关键字。 我应该忽略这些警告,还是有一种我看不到的方法来解决这个问题?
在ViewComponent中,我得到了以下警告:(我使用了) 更新: 在视图中,我有:
问题内容: 在我的JS App中,我有许多Ajax调用。我正在使用最新的Chrome浏览器,并且最近在控制台中显示以下警告。 不赞成在主线程上使用同步XMLHttpRequest,因为它会对最终用户的体验产生不利影响。如需更多帮助,请访问http://xhr.spec.whatwg.org/。 现在,我正在尝试将所有内容更改为。但这会导致很多错误,因为我的应用需要与一起运行。 警告只是错误还是其他