Tp

using System;
using System.Collections.Concurrent;
using System.Data;
using System.Linq;
using System.Threading.Tasks;

class Program
{
    static void Main()
    {
        // サンプルデータの作成
        DataTable dataTable = new DataTable();
        dataTable.Columns.Add("ID", typeof(int));
        dataTable.Columns.Add("Value", typeof(string));

        for (int i = 1; i <= 100; i++)
        {
            dataTable.Rows.Add(i, $"Value{i}");
        }

        // 結果を保存する共有リスト
        var resultList = new ConcurrentBag<string>();

        // ロックオブジェクト
        object lockObj = new object();

        Parallel.ForEach(dataTable.AsEnumerable(), row =>
        {
            try
            {
                // 行ごとの処理
                string result = ProcessRow(row);

                // 結果の追加
                resultList.Add(result);

                // ロックを使用した操作(必要に応じて)
                lock (lockObj)
                {
                    // 競合が起きやすい操作
                }
            }
            catch (Exception ex)
            {
                // エラーログ
                Console.WriteLine($"Error processing row ID {row["ID"]}: {ex.Message}");
            }
        });

        // 結果の表示
        foreach (var result in resultList)
        {
            Console.WriteLine(result);
        }
    }

    static string ProcessRow(DataRow row)
    {
        // ここで実際の行ごとの処理を行います
        return $"Processed: {row["ID"]}, {row["Value"]}";
    }
}

この記事が気に入ったらサポートをしてみませんか?