C#如何通过同步和异步多线程来读取sqlserver数据库表里的内容
时间: 2023-07-26 08:34:34 浏览: 223
C# 可以同时使用同步和异步多线程来读取 SQL Server 数据库表中的内容,以提高并发性能和系统的响应能力。以下是一个示例程序,演示如何使用同步和异步多线程来读取 SQL Server 数据库表的内容:
```csharp
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Threading.Tasks;
namespace MultiThreadedDatabaseAccess
{
class Program
{
static void Main(string[] args)
{
string connectionString = "Data Source=serverName;Initial Catalog=databaseName;Integrated Security=True;";
string query = "SELECT * FROM tableName;";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable table = new DataTable();
// 同步方法
Console.WriteLine("Synchronous read start...");
adapter.Fill(table);
Console.WriteLine("Synchronous read end.");
// 异步方法
Console.WriteLine("Asynchronous read start...");
List<Task> tasks = new List<Task>();
for (int i = 0; i < 5; i++)
{
tasks.Add(Task.Factory.StartNew(() =>
{
DataTable threadTable = new DataTable();
adapter.Fill(threadTable);
Console.WriteLine($"Thread {Task.CurrentId} finished reading {threadTable.Rows.Count} rows.");
}));
}
Task.WaitAll(tasks.ToArray());
Console.WriteLine("Asynchronous read end.");
connection.Close();
}
}
}
```
在上面的示例程序中,我们首先使用同步方法来读取 SQL Server 数据库表的内容。然后,我们使用异步方法来启动 5 个线程,每个线程都会使用相同的 SqlDataAdapter 对象来读取数据库表的内容。在每个线程完成读取后,我们会输出该线程读取的行数。最后,我们等待所有线程完成任务,并输出异步方法的结束信息。
注意,在使用异步方法时,我们需要使用 Task.WaitAll() 方法来等待所有线程完成任务。此外,我们还可以使用 async 和 await 关键字来实现更加简洁和可读的异步代码。
阅读全文