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

时间:2016-06-06 14:58:53

标签: c# sql-server multithreading sqlcommand executenonquery

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

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

第一个想法是使用多个线程。我创建了一个运行每个SqlCommand.ExecuteNonQuery()的线程。也许我创建了一个bool列表,在执行完成时设置为true。然后,在主线程上,我继续验证这些bool并且如果它们中的任何一个是假的则睡觉。即使抛出异常,try-finally也会将bool设置为true。

这是最好的解决方案吗?任何人都可以想出更好的方法吗?

1 个答案:

答案 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。