我有以下代码:
id
所有这些都是content
方法,所有这些方法一起大约需要30秒,而并行应该大约需要7秒。
现在,如果我在// good
{content.map(content =>
<p key={content.id}>{content.Content}</p>
)}
之前和之后记录时间,我的时间不到一秒。
我的问题是:为什么?我如何Parallel.Invoke(
() => this.GetUsers(),
() => this.GetFrequentVisitors(),
() => this.GetTenantSettings(),
() => this.GetTranslations()
);
Async Task
所以我知道最后一次通话何时结束?
现在我只能实现一切似乎是即时的,这似乎是错误的,或者是顺序的一切,这对用户来说是无法忍受的。
我也试过这个:
Parallel.Invoke
似乎只是永远挂在那里并阻止我的应用。
注意:这是我正在等待的await
方法,但内部没有等待(我展示的是完整的方法)。如果我改变它,我得到的结果没有什么不同。
有人可以帮我一点吗?有一点解释?我现在正在努力解决异步/线程问题。
阅读此article有点帮助,但他们似乎不需要.Invoke()
让我感到惊讶的 Task users = this.GetUsers();
Task visitors = this.GetFrequentVisitors();
Task settings = this.GetTenantSettings();
Task translations = this.GetTranslations();
Task.WaitAll(users, visitors, settings, translations);
。
答案 0 :(得分:5)
使用您的$.ajaxPrefilter(function(options, originalOptions, xhr){
/* my filter function */
});
变体&#34;永远悬挂&#34;,它表示您依赖于UI线程,并且其中一个或多个方法也希望进入UI线程。
将此当前方法更改为WaitAll
,以便您可以async
:
await
而且,重要的是,这将释放UI线程(或其他重要的同步上下文),以便这些其他异步方法可以取得进展。