

##### 質問１

提示コードですが以下の `/* # delegate
#*/`関数の`await`関数の使い方は正しいのでしょうか？すべての非同期つまり三つの処理が終わるのを待ってから非同期を生成するという処理です。

##### 質問２

`setDataList_Async(string u)`関数の`Task.Run(dele);`は`await`せず `/* # delegate
#*/`の`await
Task.WhenAll(taskData.ToArray());`関数で三つの処理が終わったらまた三つの処理を行うということをやっているのですが`Debug.WriteLine()`で確認したのですがこういった処理の作り方自体は正解なのでしょうか？

##### 質問３

総じて非同期の使い方として正解なのでしょうか？

##### コード処理内容

`yt-
dlp.exe`を使ってyoutubeの動画のプレイリストのタイトルやフォーマットをすべて`Data`というクラスに格納する際のロード時間をマルチタスクにすることによって待ち時間をなくし連続して追加できる非同期の処理

##### 環境

OS: windows10  
IDE: Visual studio 2022  
言語: C#  
バージョン: .Net 6.0  
作成したプロジェクト: windows form

##### 参考サイト

(async/awaitキーワード、そして「非同期メソッド」とは)部
<https://qiita.com/acple@github/items/8f63aacb13de9954c5da>

##### ソースコード

[code]

            /* ########################### delegate ###########################*/
            private async void job()
            {
                List<string> list = new List<string>();
    
    
                PlayList playlist = new PlayList();
    
    
                list = playlist.getURL_List(url);
    
                Debug.WriteLine("ID全取得  " + list.Count);
    
    
                int total = 3;
                foreach (string item in list)
                {
                    if (taskData.Count > total)
                    {
                        await Task.WhenAll(taskData.ToArray());
                        Debug.WriteLine("待機しました。");
                        setDataList_Async(item);
                        total += 3;
                    }
                    else
                    {
                        setDataList_Async(item);
                    }
                }
    
    
            }
    
            /* ########################### プレイリストを設定　非同期 ###########################*/
            private async void setDataPlayList_Async(string url)
            {
    
                await Task.Run(job);   //非同期メソッドを実行
    
                //setDataList_Async(list[0]);
    
                //Debug.WriteLine(list.Count());
            }
    
            /* ########################### リストに設定　非同期 ###########################*/
            public void setDataList_Async(string u)
            { 
                Func<Data?> dele = () =>
                {
                    
                    Data d = new Data();
                    d.setData(u); //フォーマットを設定
    
                    if (d.getFormat() != null)
                    {
                        data.Add(d);
                        
                        this.Invoke(new Action(() =>
                        {
                            Debug.WriteLine("   Invoke");
                            checkedListBox_list.Items.Add(d.getTitle());
                        }));
                        
                        Debug.WriteLine("リスト格納");
                        return d;
                    }
                    else
                    {
                        Debug.WriteLine("ああああ       " + u);
                        //MessageBox.Show("URL ERROR: " + u,"", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return null;
                    }
                };
    
                taskData.Add(Task.Run(dele));
    
            }
    
    
    
[/code]


CC BY-SA 4.0
2022-05-25T10:49:21.590
89050
2022-05-25T10:53:01.103
2022-05-25T10:53:01.103
question
c# windows .net
C# window form この場合の非同期awaitの使い方が正しいのか知りたい