using MesETL.Shared.Helper; var connStr = GetArg("-s") ?? throw new ApplicationException("未配置数据库连接字符串"); var eachLimit = int.Parse(GetArg("-l") ?? "1000"); var parallelTask = int.Parse(GetArg("-p") ?? "4"); var deletionCount = 0; Console.WriteLine("Running Deletion..."); _ = Task.Run(async () => { while (true) { await Task.Delay(5000); Console.WriteLine($"[{DateTime.Now}] DELETE COUNT: {deletionCount}"); } }); await Parallel.ForAsync(0, parallelTask, async (i, token) => { while (true) { var effectRows = await DatabaseHelper.NonQueryAsync(connStr, $"DELETE FROM `order_data_block` WHERE CompanyID = 0 ORDER BY ID LIMIT {eachLimit};", token); if(effectRows == 0) break; Interlocked.Add(ref deletionCount, effectRows); } }); Console.WriteLine($"[{DateTime.Now}] DELETE COUNT: {deletionCount}"); return; string? GetArg(string instruct) { var idx = Array.IndexOf(args, instruct); if (idx == -1) return null; if (args[idx + 1].StartsWith('-')) throw new ArgumentException("Argument Lost", nameof(instruct)); return args[idx + 1]; } // var match = await DatabaseHelper.QueryTableAsync(connStr, // $"SELECT `ID` FROM `order_data_block` WHERE CompanyID = 0 LIMIT {eachLimit};", // token); // var rows = match.Tables[0].Rows; // if (rows.Count == 0) // return; // // foreach (DataRow row in rows) // { // var id = row["ID"].ToString(); // await DatabaseHelper.NonQueryAsync(connStr, $"DELETE FROM `order_data_block` WHERE `ID` = {id}", token); // }