在事务范围内对SQL Server的多个异步查询

时间:2018-05-06 07:32:18

标签: c# .net sql-server ado.net

尝试在事务范围下对SQL Server运行多个异步查询 - 遗憾的是它失败了。有什么方法可以使它工作吗? Unit test在GitHub上。

我有一张测试表:

database

只有一条记录:

CREATE TABLE [dbo].[People]
(
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Name] [varchar](10) NOT NULL,

    PRIMARY KEY CLUSTERED ([Id] ASC)
)

测试代码如下所示:

INSERT INTO [People] ([Name]) VALUES ('John Doe')  

其中[TestMethod] public void Should_Work() { using (var scope = new TransactionScope( TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadCommitted })) { var tx = Transaction.Current; var name = Task.Run(async () => { using (var scope2 = new TransactionScope(tx, TransactionScopeAsyncFlowOption.Enabled)) { var result = await Task.WhenAll( from i in Enumerable.Range(0, 2) select QueryAsync()); scope2.Complete(); return result[0]; } }).Result; Assert.AreEqual("John Doe", name); } } 是:

QueryAsync

问题出现在第二次连接开放时:

  

消息:测试方法SqlTests.UnitTest1.Should_Work引发异常:   System.AggregateException:发生一个或多个错误。 --->   System.Transactions.TransactionAbortedException:事务有   中止。 ---> System.Transactions.TransactionPromotionException:   尝试促进交易时失败。 --->   System.Data.SqlClient.SqlException:已经打开了   与此命令关联的DataReader必须先关闭。   ---> System.ComponentModel.Win32Exception:等待操作超时

0 个答案:

没有答案