同时执行多个 SqlCommand.ExecuteNonQuery() 并在它们完成时收到通知

Execute multiple simultaneous SqlCommand.ExecuteNonQuery() and be notified when they finish

我有一组 SQL 命令不 return 查询,只有受影响记录的数量。他们 运行 在不同的服务器上。

他们可以同时运行,我不需要等一个完成再开始另一个。我正在开发一个 C# 应用程序,我想并行执行它们,然后等待它们全部完成并获取它们的 int returns.

第一个想法是使用多线程。我创建了一个线程 运行 每个 SqlCommand.ExecuteNonQuery()。也许我创建了一个 bool 列表,在执行完成时将其设置为 true。然后,在主线程上,我不断验证这些布尔值,如果其中任何一个为假,我就休眠。即使抛出异常,try-finally 也会将 bool 设置为 true。

这是最好的解决方案吗?有人能想出更好的方法吗?

根据您的 .NET 版本和您的环境,您可以为此使用异步等待:

public static async Task ExecuteInParallel(SqlCommand[] commands)
{
    var sqlTasks = commands.Select(c => ExecuteNonQueryAsync());
    await Task.WhenAll(sqlTasks);
}

要阻塞线程并等待所有命令完成:

Task.WhenAll(sqlTasks).Wait();

但是请注意,阻止 may lead to a deadlock

要异步处理完成,您可以等待该方法或使用 ContinueWith。