提示コードのTask.WaitAll()の部分ですが10個のタスクが終わったらまた10個貯めて終わったらまた10個といった具合にタスクの終了待ちをしているのですがこの関数に達してから処理が動かず次のtotal += 10という変数に加算されません。またその次のええええのコンソールログも出力されません。これはどうなっているんでしょうか?提示コード//非同期メソッドを実行
部
また下記のawait.csはawait していまっているので無限にタスクが走ってしまいます。
環境
.Net framework 6.0
windows form
C#言語
OS: Windows10
IDE: Visual studio 2022
参考サイト:https://www.delftstack.com/ja/howto/csharp/wait-for-thread-to-finish-in-csharp/
出力
1 えええええ 2 えええええ 3 えええええ 4 Title えええええ Title 5 えええええ Title Title 6 えええええ Title 7 えええええ 8 えええええ Title 9 えええええ 10 えええええ 11 qqqqqqqqq Title スレッド 0x1bd8 はコード 0 (0x0) で終了しました。 Title title [720p] Kosmos, Cosmos - Yukiho, Chihaya, Hibiki (Idolmaster 2 S4U mode) Title Title Title Format title The iDOLM@STER 2: Little Match Girl (Yukiho, Makoto, Haruka) title [720p] The Idolm@ster 2nd-Mix - Quintet (from THE iDOLM@STER 2 S4U mode) title THE iDOLM@STER 2 - 『Do-Dai』 (響 やよい 雪歩) [HD] Format Format スレッド 0x48e4 はコード 0 (0x0) で終了しました。 title The iDOLM@STER 2: kiramekirari (Yayoi, Mami, Hibiki) Format title The iDOLM@STER 2: I Want (Makoto, Ritsuko, Azusa) title The iDOLM@STER 2: Ai Like Hamburger (Haruka, Miki, Yayoi) ERROR ERROR: [youtube] ZSvnFswX0hU: Video unavailable. This video contains content from Nippon Columbia Co., Ltd., who has blocked it on copyright grounds Format 終了 ああああ "https://www.youtube.com/watch?v=ZSvnFswX0hU" title The iDOLM@STER: Meisou Mind (Makoto, Yukiho, Miki) Format 'Downloader.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.5\System.Text.RegularExpressions.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。 title The iDOLM@STER 2: Honey Heartbeat (Hibiki, Chihaya, Takane) 終了 Format Format 終了 終了 終了 Format 終了 Format title The iDOLM@STER 2: MEGARE! (Makoto, Ritsuko, Hibiki) Format 終了 終了 終了 終了 終了 スレッド 0x43d0 はコード 0 (0x0) で終了しました。 スレッド 0x3b8c はコード 0 (0x0) で終了しました。 スレッド 0x3668 はコード 0 (0x0) で終了しました。 スレッド 0x4a50 はコード 0 (0x0) で終了しました。 スレッド 0x2c4c はコード 0 (0x0) で終了しました。 スレッド 0x40d4 はコード 0 (0x0) で終了しました。 プログラム '[16568] Downloader.exe' はコード 4294967295 (0xffffffff) で終了しました。
form1.cs
cs
1 2 /* ########################### リストに設定 非同期 ###########################*/ 3 public async void setDataList_Async(string u) 4 { 5 Func<Data?> job = () => 6 { 7 Data d = new Data(); 8 d.setData(u); //フォーマットを設定 9 10 if (d.getFormat() != null) 11 { 12 data.Add(d); 13 if (this.InvokeRequired) 14 { 15 this.Invoke(new Action(() => 16 { 17 Debug.WriteLine("あああああ"); 18 checkedListBox_list.Items.Add(d.getTitle()); 19 })); 20 } 21 22 return d; 23 } 24 else 25 { 26 Debug.WriteLine("ああああ " + u); 27 //MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); 28 return null; 29 } 30 }; 31 32 33 taskData.Add(Task.Run(job)); //非同期メソッドを実行 34 Debug.WriteLine(taskData.Count); 35 if (taskData.Count > total) 36 { 37 Debug.WriteLine("qqqqqqqqq"); 38 39 Task.WaitAll(taskData.ToArray()); 40 Debug.WriteLine("qwwwww"); 41 total += 10; 42 } 43 44 Debug.WriteLine("えええええ"); 45 /* 46 //成功時 リストに代入 47 if (b != null) 48 { 49 Debug.WriteLine(b.getTitle()); 50 checkedListBox_list.Items.Add(b.getTitle()); 51 } 52 else 53 { 54 Debug.WriteLine("null"); 55 } 56 */ 57 } 58
await.cs
cs
1 2 /* ########################### リストに設定 非同期 ###########################*/ 3 public async void setDataList_Async(string u) 4 { 5 Func<Data?> job = () => 6 { 7 Data d = new Data(); 8 d.setData(u); //フォーマットを設定 9 10 if (d.getFormat() != null) 11 { 12 data.Add(d); 13 14 this.Invoke(new Action(() => 15 { 16 Debug.WriteLine("あああああ"); 17 checkedListBox_list.Items.Add(d.getTitle()); 18 })); 19 20 21 return d; 22 } 23 else 24 { 25 Debug.WriteLine("ああああ " + u); 26 //MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); 27 return null; 28 } 29 }; 30 31 32 await Task.Run(job); //非同期メソッドを実行 33 34 35 Debug.WriteLine("えええええ"); 36 /* 37 //成功時 リストに代入 38 if (b != null) 39 { 40 Debug.WriteLine(b.getTitle()); 41 checkedListBox_list.Items.Add(b.getTitle()); 42 } 43 else 44 { 45 Debug.WriteLine("null"); 46 } 47 */ 48 }
前回の質問と同じ。
意味不明なベストアンサーで閉じるんだったら聞かないでください。
それとも二人で組んで誰の役にも立たない質問と回答を量産する嫌がらせでもしてるのかな?

質問者さん、無言ですが、回答したのでそれに対するフィードバックをタイムリーに返してください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったならどこがダメかを書くとより期待に近い回答が出てくるかも。とにかく無言は NG です。

すいませんちょっと忙しかったので確認できませんでした

回答が付いた後は質問を書き換えないでください。回答とのつじつまが合わなくなりますので。元に戻して、何か書きたいなら、追記という形で書いてください。

すいませんでした。

謝る必要はないので、回答が付く前の内容に戻してください。何か書きたいなら、追記という形で書いてください。
元の質問は「C# Task.WaitAll()メソッドの使い方が知りたい」でした。

回答1件
あなたの回答
tips
プレビュー