riruo
@riruo

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

C#  複数タスクを同時処理したい

解決したいこと

C# WPFのプログラムで下記処理を行いたいが、適した実装方法/ロジックがわからない。

・プロフィール管理(3種の情報を名前付きで保存できるようにしたい)
・各プロフィール事に処理を行いたい
例:プロフィール1,2,3を追加
プロフィール1,3ではA処理、プロフィール2は B処理を"同時に行いたい"
(通信を利用する処理も想定している)

C#を勉強したてであるため、本来この質問にはソースコード等を掲載するかと思いますが
実装方法等がわからず、ある程度自身で調べてみたものの参考になる文書が見つからないため、利用させていただきました。

1

1Answer

ひとまず、複数の処理を非同期で同時に実行する処理をべた書きするとこんな感じでしょうか。
動作確認していないので、コーディングミスあるかもしれませんが。

private Task RunAsync()
{
    var taskList = new List<Task>();

    var task1 = Task.Run(() =>
    {
      // 何か重い処理
    };
    taskList.Add(task1);

    var task2 = Task.Run(() =>
    {
      // 何か重い処理
    };
    taskList.Add(task2);

    // 全部のタスクの完了まで待機するタスクを生成
    return Task.WhenAll(taskList);
}

// async - await 使用する場合
private async void OnStartButtonClick(object obj, EventArgs e)
{
   await RunAsync();
   MessageBox.Show("Complete");
}

// 個人的にはこっちを使用しています
private void OnRunButtonClick(object obj, EventArgs e)
{
   RunAsync()
     .ContinueWith(t =>
     {
        // 非同期で実行される
        _window.Dispatcher.Invoke(() => 
        {
           // メインスレッドで実行する内容
           MessageBox.Show("Complete");
        });
     });
}

1Like

Your answer might help someone💌