我正在尝试处理三个SQL sprocs,每个sprocs大约需要15分钟。它们独立运行但最终会合并。我正在使用任务尝试并行执行(现在尝试Parrallel.foreach),但第一个被命中的SQL会导致任何未完成的任务停止并等待,从而无法实现目的。
在下面的代码中,我更改为ASYNC执行非查询以查看是否有帮助(它没有)原来它是常规命令.ExecuteNonQuery() - 相同的结果
using (SqlConnection connection = new SqlConnection()
{
connection.Open();
var task1 = Task.Factory.StartNew(() =>
{
TrackerInfo("T1 started");
var t = SqlHelper.ExecuteNonQueryAsync("Sproc1", connection, System.Data.CommandType.StoredProcedure);
t.Wait();
TrackerInfo("T1 completed");
});
var task2 = Task.Factory.StartNew(() =>
{
TrackerInfo("T2 started");
var t = SqlHelper.ExecuteNonQueryAsync("Sproc2", connection, System.Data.CommandType.StoredProcedure);
t.Wait();
TrackerInfo("T2 completed");
});
var task3 = Task.Factory.StartNew(() =>
{
TrackerInfo("T3 started");
var t = SqlHelper.ExecuteNonQueryAsync("Sproc3", connection, System.Data.CommandType.StoredProcedure);
t.Wait();
TrackerInfo("T3 completed");
});
然后我在这里打电话给他们:
Task.WaitAll(task1, task2, task3);
哪种方法有效,除了所有任务在达到各自的SQL执行时都会停止,并在完成时选择。
我错过了什么吗?
编辑 - 以下评论解释了为什么会发生这种情况。但是还没有人回答(还)。