提示コードの///
コメント部ですが処理をの数を制限するとウインドウがフリーズしてしまいます。これを回避するにはどうしたらいいのでしょうか?参考サイトのやり方ではフリーズしてしまいます。
知りたいこと
10個タスクを生成してそれが全部終わったらまた10個生成して実行という処理を作りたのですがこれをするにはどうやって終了を検知したらいいのでしょうか
参考サイト:https://ufcpp.net/study/csharp/misc_task.html
cs
/* ########################### プレイリストを設定 非同期 ###########################*/ private async void setDataPlayList_Async(string url) { List<string> list = new List<string>(); Action job = () => { PlayList playlist = new PlayList(); list = playlist.getURL_List(url); //Debug.WriteLine("ID全取得"); }; await Task.Run(job); //非同期メソッドを実行 //setDataList_Async(list[0]); ///////////////////////////////////////////////////// foreach (string item in list) { setDataList_Async(item); } ///////////////////////////////////////////////////// Debug.WriteLine(list.Count()); } /* ########################### リストに設定 非同期 ###########################*/ public async void setDataList_Async(string u) { Func<Data?> job = () => { Data d = new Data(); d.setData(u); //フォーマットを設定 if (d.getFormat() != null) { data.Add(d); return d; } else { MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error); return null; } }; taskData.Add(Task.Run(job)); //非同期メソッドを実行 if(taskData.Count > total) { Task.WaitAll(taskData.ToArray()); total += 10; } /* //成功時 リストに代入 if (b != null) { Debug.WriteLine(b.getTitle()); checkedListBox_list.Items.Add(b.getTitle()); } else { Debug.WriteLine("null"); } */ }
まだ回答がついていません
会員登録して回答してみよう