gpt4 book ai didi

c# - 在 .NET 4.5.1 中异步执行事务数据库操作

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:20 29 4
gpt4 key购买 nike

我编写了一个程序以异步方式执行数据库操作。我尝试使用 BeginTransaction() 或 TransactionScope 在数据库事务中运行它,但没有成功。我在 VS2012 中单步执行代码,注意到执行会在看到等待 ExecuteNonQueryAsync 时跳出 foreach 循环。

public delegate void CallBackMethod();

public async Task MyFunction(List<string> items, CallBackMethod functionToCallBeforeCommitTransaction)
{
using (TransactionScope trans = new TransactionScope(
TransactionScopeOption.RequiresNew,
TransactionScopeAsyncFlowOption.Enabled ))
{
using (SqlConnection conn = new SqlConnection(myConnectionString))
{
await conn.OpenAsync();
foreach (string item in items)
{
SqlCommand cmd = new SqlCommand("MySproc", conn);
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@ItemID", item);
await cmd.ExecuteNonQueryAsync();
// ^^^ Execution jumps out here and returns back to the calling function.
// No exception was raised. It did not continue the loop.
}
}
functionToCallBeforeCommitTransaction();
trans.Complete();
}
}

已编辑:包括方法标题/签名。

最佳答案

谢谢约翰!你没看错!!

我忘记在调用者中使用 await 或 .Wait()。在 .NET 4.5.1 之前,我非常关注事务的异步支持问题

await MyFunction();

MyFunction().Wait();

顺便说一下,.NET 4.5.1 Developer Pack (KB2878632)需要安装,以便您可以将项目目标从 .NET Framework 4.0 更改为 4.5.1

关于c# - 在 .NET 4.5.1 中异步执行事务数据库操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22088829/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com