TPL任务停止执行SQL

时间:2014-04-25 20:06:01

标签: c# task-parallel-library

我正在尝试处理三个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执行时都会停止,并在完成时选择。

我错过了什么吗?

编辑 - 以下评论解释了为什么会发生这种情况。但是还没有人回答(还)。

0 个答案:

没有答案