DataMigrator.cs
public class DataMigrator
{
private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(100); // 控制并发度为 100
public async Task MigrateDataAsync()
{
// 假设这是需要迁移的表名列表
var tables = new List<string>();
for (int i = 0; i < 1000; i++)
{
tables.Add("table" + i);
}
// 创建并发任务列表
var migrationTasks = tables.Select(table => MigrateTableAsync(table)).ToList();
// 等待所有任务完成
await Task.WhenAll(migrationTasks);
}
private async Task MigrateTableAsync(string tableName)
{
await _semaphore.WaitAsync(); // 控制并发度
try
{
Console.WriteLine($"开始迁移表: {tableName}");
// 模拟操作耗时
await Task.Delay(1000); // 1秒
Console.WriteLine($"完成迁移表: {tableName}");
}
catch (Exception ex)
{
Console.WriteLine($"迁移表 {tableName} 时发生错误: {ex.Message}");
}
finally
{
_semaphore.Release(); // 释放信号量
}
}
}
Program.cs
var migrator = new DataMigrator();
await migrator.MigrateDataAsync();