我有一个连接到多个SQL服务器实例的函数,用于从每个服务器获取一组数据,以便在多个环境之间比较数据
我有一组连接字符串 我在foreach循环中为集合中的每个连接字符串调用此方法
由于数据是从不同的服务器中逐个获取的,因此一次占用大量时间 我想知道我是否每次使用线程调用此方法最好的方法是什么?
答案 0 :(得分:4)
有几种方法可以做到这一点
1。)创建一组任务,然后执行“await Task.WaitAll(listOfTasks)”
2。)使用Parallel.ForEach
3。)管理线程
管理线程
我分两步完成:
1。)创建一个线程列表
List<Thread> threads = new List<Thread>();
foreach(var connectionString in ConnectionStrings)
{
var thread = new Thread(DoWork);
thread.Start(connectionString);
threads.Add(thread);
}
2。)将线程加入当前线程,具有阻塞效果,直到完成所有线程。
foreach(var thread in threads)
{
thread.Join()
}
答案 1 :(得分:1)
您可以Join
线程并让程序等待所有线程,直到它们完成。在进入下一步之前,这是一个很好的实践。查看下面的代码与示例:
// list of threads
List<Thread> threads = new List<Thread>();
// list of the results for each thread
List<SomeTypeDto> results = new List<SomeTypeDto>();
foreach(var connectionString in connectionStringList) {
// create the thread
Thread thread = new Thread(() => {
// access the database
SomeTypeDto result = /* process some result data*/;
lock (results) {
results.Add(result);
}
});
threads.Add(thread);
}
// start all threads
foreach (Thread thread in threads) {
thread.Start();
}
// Wait for all the threads to finish
foreach (Thread thread in threads) {
thread.Join();
}