2017-09-14 14 views
0

私はparallel.foreachとasyncの組み合わせに問題があります。私の問題は、私はすべてのジョブを完了したループの確認することができる方法で、今C# - Parallel.ForEachとAsyncの組み合わせ

new Thread(() =>{ 
    //doing some stuff here 
    Parallel.ForEach(.....,ParallelOption,async(j,loopState) => 
    { 
     //await some stuff here like: 
     // HttpResponseMessage res = await httpClient.GetAsync(url); 
     // UpdateUI 
    } 
}).Start(); 

- ここに は私のコードですか?それはほんの数秒で終了しますが、UIUpdateはずっと時間がかかります。 await httpClient.GetAsync(url)が完了してUIを更新するのを待つ方法はありますか?

+0

あなたは同期していないと言っていますか? –

+0

@AsthaSrivastava、彼は、 'Parallel.ForEach'はループ本体によって開始されたすべてのタスクが完了する前に完了すると言っています。これはよく知られている問題です。 'Parallel.ForEach'は' async'デリゲートで動作するようには設計されていません。 –

+0

@KirillShlenskiyまさに、どうすればいいのですか?別の道か何かのエスル?ありがとう。 – Mahdi

答えて

2

Using async/await for multiple tasks

return Task.WhenAll(ids.Select(i => DoSomething(1, i, blogClient))); 

私はあなたの実際のループのコードに何があるか分かりません。もっと上に置くと、私はこれをより具体的にすることができます。基本的にはWhenAllを使用してすべての仕事を待っていますが

関連する問題