我有一组不会返回查询的SQL命令,只有受影响的记录数量。它们运行在不同的服务器上。
他们可以同时运行,我不需要等待一次完成另一次。我正在开发一个C#应用程序,我想并行执行它们,然后等待它们全部完成并获得它们的int返回。
第一个想法是使用多个线程。我创建了一个运行每个SqlCommand.ExecuteNonQuery()
的线程。也许我创建了一个bool列表,在执行完成时设置为true。然后,在主线程上,我继续验证这些bool并且如果它们中的任何一个是假的则睡觉。即使抛出异常,try-finally也会将bool设置为true。
这是最好的解决方案吗?任何人都可以想出更好的方法吗?
答案 0 :(得分:3)
根据您的.NET版本和您的环境,您可以使用async await:
public static async Task ExecuteInParallel(SqlCommand[] commands)
{
var sqlTasks = commands.Select(c => ExecuteNonQueryAsync());
await Task.WhenAll(sqlTasks);
}
阻止线程并等待所有命令完成:
Task.WhenAll(sqlTasks).Wait();
但请注意阻止{{3}}。
要异步处理完成,您可以等待方法或使用ContinueWith。