C#4.0任务库死锁

C#4.0任务库死锁,c#,.net,sql,C#,.net,Sql,我正在试验以下代码: foreach (var r in _vm.Rules.Take(20)) { Task.Factory.StartNew(() => { new SQLRuleSerializer().SaveRule(_vm.SelectedKey, r); }); } 错误: 事务(进程ID 600)在另一个进程的锁资源上被死锁,并被选为死

我正在试验以下代码:

        foreach (var r in _vm.Rules.Take(20)) {
            Task.Factory.StartNew(() => {
                new SQLRuleSerializer().SaveRule(_vm.SelectedKey, r);
            });             
        }
错误:

事务(进程ID 600)在另一个进程的锁资源上被死锁,并被选为死锁牺牲品。重新运行事务

考虑到我没有任何明确的锁,我不确定这到底是如何死锁的。。我想问题在于序列化程序是一个代理,即使通过单独的实例也不能并行调用

事务(进程ID 600)在另一个进程的锁资源上被死锁,并被选为死锁牺牲品。重新运行事务

死锁来自SQL Server,而不是C代码

事务(进程ID 600)在另一个进程的锁资源上被死锁,并被选为死锁牺牲品。重新运行事务


死锁来自SQL Server,而不是C代码。

您试图并行保存20条不同的规则,但似乎每次保存都需要SQL Server上的一些锁。这意味着并行化很可能没有好处,因此您应该使用普通循环而不使用TPL。

您试图并行保存20个不同的规则,但似乎每次保存都需要在SQL server上设置一些锁。这意味着并行化很可能没有好处,所以您应该使用普通循环而不使用TPL