首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C#中实现MultiThreaded事务?

在C#中实现MultiThreaded事务,可以使用System.Transactions命名空间中的TransactionScope类。TransactionScope类可以帮助您在多线程环境中创建一个事务,并确保所有参与的线程都在同一个事务中运行。

以下是一个简单的示例,展示了如何在C#中使用TransactionScope实现MultiThreaded事务:

代码语言:csharp
复制
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Transactions;

class Program
{
    static void Main(string[] args)
    {
        string connectionString = "Data Source=localhost;Initial Catalog=TestDB;Integrated Security=True";
        string sql = "INSERT INTO TestTable (Name) VALUES (@Name)";

        using (var scope = new TransactionScope())
        {
            List<Task> tasks = new List<Task>();

            for (int i = 0; i < 10; i++)
            {
                tasks.Add(Task.Run(() =>
                {
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        connection.Open();

                        using (SqlCommand command = new SqlCommand(sql, connection))
                        {
                            command.Parameters.AddWithValue("@Name", $"Thread-{i}");
                            command.ExecuteNonQuery();
                        }
                    }
                }));
            }

            Task.WaitAll(tasks.ToArray());
            scope.Complete();
        }
    }
}

在这个示例中,我们创建了一个TransactionScope对象,并在其中执行了10个线程。每个线程都向数据库中插入一条记录。如果所有线程都成功执行,则调用scope.Complete()方法提交事务。如果有任何一个线程执行失败,事务将自动回滚。

需要注意的是,在使用TransactionScope时,务必确保所有参与的线程都在同一个线程上下文中运行。如果您的代码中使用了异步方法,请确保在调用这些方法时使用await关键字,而不是Task.Run()方法。

此外,TransactionScope对象还可以接受一个TransactionOptions参数,用于指定事务的隔离级别、超时时间等选项。这些选项可以帮助您更好地控制事务的行为。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券