在C#中等待Parallel.Invoke()的结束

时间:2016-02-17 14:35:50

标签: c# multithreading asynchronous parallel-processing

我有以下代码:

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);

1 个答案:

答案 0 :(得分:5)

使用您的$.ajaxPrefilter(function(options, originalOptions, xhr){ /* my filter function */ }); 变体&#34;永远悬挂&#34;,它表示您依赖于UI线程,并且其中一个或多个方法也希望进入UI线程。

将此当前方法更改为WaitAll,以便您可以async

await

而且,重要的是,这将释放UI线程(或其他重要的同步上下文),以便这些其他异步方法可以取得进展。