我是新來的所有.NET中的並行編程模式,我想知道兩件事情:等待並行編程來完成所有任務,而無需凍結了GUI
- 我怎麼能等待所有我的任務完成運行,而不會凍結我的主要形式。
- 我的方法是解決以下問題最好的方法去做呢?
我有一個private async Task RunTask(string task)
方法,我需要運行多少次我的任務。
在private async void button_click(object sender, EventArgs e)
類中,我有一個名爲tasklist
的字符串列表,它初始化我需要運行的任務。我運行下面的代碼:
Thread thread = new Thread(()=> Parallel.ForEach(tasklist, t => RunTask(t)));
thread.Start();
RunOnCompletionOfTasks();
我需要能夠利用我所有的CPU核心和在儘可能短的時間最短運行所有任務。我想Parallel.ForEach
是實現這一目標的最佳方式,但我的任務也是async
,因爲它們具有需要等待其他方法的功能。我的任務還會在其執行期間向類中的List<string>
對象追加一個字符串。
Parallel.ForEach
導致我的Windows窗體凍結,所以我把它封裝在一個線程中。這個問題是RunOnComlpetionOfTasks();
在我的任務完成之前運行。
什麼是最有效的方式讓我運行我所有的RunTask
任務,然後在完成時運行RunOnCompletionOfTasks
而不凍結Windows窗體?
請謝謝。
我認爲您正在尋找'await Task.WhenAll' – BradleyDotNET