質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

解決済

C# Task.WaitAll()メソッドの使い方が知りたい

samidare_chan
samidare_chan

総合スコア142

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

1回答

-5評価

0クリップ

652閲覧

投稿2022/05/23 10:44

編集2022/05/25 12:26

提示コードの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

/* ########################### リストに設定 非同期 ###########################*/ public async void setDataList_Async(string u) { Func<Data?> job = () => { Data d = new Data(); d.setData(u); //フォーマットを設定 if (d.getFormat() != null) { data.Add(d); if (this.InvokeRequired) { this.Invoke(new Action(() => { Debug.WriteLine("あああああ"); checkedListBox_list.Items.Add(d.getTitle()); })); } return d; } else { Debug.WriteLine("ああああ " + u); //MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } }; taskData.Add(Task.Run(job)); //非同期メソッドを実行 Debug.WriteLine(taskData.Count); if (taskData.Count > total) { Debug.WriteLine("qqqqqqqqq"); Task.WaitAll(taskData.ToArray()); Debug.WriteLine("qwwwww"); total += 10; } Debug.WriteLine("えええええ"); /* //成功時 リストに代入 if (b != null) { Debug.WriteLine(b.getTitle()); checkedListBox_list.Items.Add(b.getTitle()); } else { Debug.WriteLine("null"); } */ }
await.cs

cs

/* ########################### リストに設定 非同期 ###########################*/ public async void setDataList_Async(string u) { Func<Data?> job = () => { Data d = new Data(); d.setData(u); //フォーマットを設定 if (d.getFormat() != null) { data.Add(d); this.Invoke(new Action(() => { Debug.WriteLine("あああああ"); checkedListBox_list.Items.Add(d.getTitle()); })); return d; } else { Debug.WriteLine("ああああ " + u); //MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } }; await Task.Run(job); //非同期メソッドを実行 Debug.WriteLine("えええええ"); /* //成功時 リストに代入 if (b != null) { Debug.WriteLine(b.getTitle()); checkedListBox_list.Items.Add(b.getTitle()); } else { Debug.WriteLine("null"); } */ }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Zuishin

2022/05/23 11:01

前回の質問と同じ。 意味不明なベストアンサーで閉じるんだったら聞かないでください。
Zuishin

2022/05/23 11:02 編集

それとも二人で組んで誰の役にも立たない質問と回答を量産する嫌がらせでもしてるのかな?
SurferOnWww

2022/05/24 22:40

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

2022/05/25 00:23

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

2022/05/25 02:10 編集

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

2022/05/25 02:35 編集

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

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。