在C#中线程化

时间:2010-03-12 05:39:18

标签: c# multithreading

我有控制台应用程序。因为我有一些过程通过不同的层(业务和数据访问)从数据库中获取数据。将获取的数据存储在各个对象中。就像为学生提取数据一样,这些数据将存储(分配)给Student对象。同样适合学校。并且他们代表调用根据要求生成输出的特定方法。这个过程会多次执行10次。好?我想同时运行这个过程。没有人会开始,它会完成,然后第二个将开始。 我希望在开始第1个过程之后,只需2个,第3个......第10个必须开始。意味着它应该是多线程的。我怎么能实现这个目标?是否会在与数据库连接打开和关闭时给出错误? 我试过这个概念。但是当线程1'st启动时,为线程1提取的数据将存储在其各自的(学生,学校)对象中。好?同时2'nd线程启动时,数据正在改变第1个对象,而控制流程在程序中。该怎么办?

8 个答案:

答案 0 :(得分:2)

以下是一些示例代码:

static void Main(string[] args)
{
    for (int i=0; i<10; i++)
        System.Threading.ThreadPool.QueueUserWorkItem(new WaitCallback(DbWork));
}

public void DbWork(object state)
{
    // Call your database code here.
}

答案 1 :(得分:0)

查看ThreadPool课程。它应该将您放在正确的位置,以便轻松处理多线程应用程序

答案 2 :(得分:0)

是的,这需要多线程,但我觉得这是第一次尝试的糟糕选择。多线程很复杂,需要你“忘掉”从程序编程中学到的一些东西。通过同时连接到同一数据库引擎的数据库连接会使这一点变得更加复杂,这可能会也可能不会提高您的性能。

答案 3 :(得分:0)

在.NET 4.0中查看Parallel Programming。特别是并行任务库使您能够很好地控制可以相互依赖的不同任务的线程。

答案 4 :(得分:0)

此链接可以帮助您:

DotNet Academy

您可以使用线程修改此解决方案,您将获得所需的结果。 http://dotnetacademy.blogspot.com/2010/02/multiple-active-result-sets-mars-in-sql.html

答案 5 :(得分:0)

您需要为每个线程实例化每个类的新实例。如果每次调用数据库都在修改第一次调用的数据,那么您将引用同一个实例。多线程被认为是一个“高级主题”,如果可能的话,你可能想找到解决这个问题的另一种方法。

答案 6 :(得分:0)

这可能会有所帮助!

启动一个主线程的线程,该线程按顺序调用所有线程1,2,3 ....并将此逻辑用于主线程

主线程开始..

线程1在第一次启动时启动,如果不是第一次则恢复 工作完成了 暂停t1

开始t2是第一次 或者如果不是第一次就恢复t2

t2工作完成 t2暂停

t3开始或恢复为首先处理的条件

所有线程的

等等

主线程将控制所有线程的序列并暂停并恢复它们

试试这个,

答案 7 :(得分:0)

除非您了解机制和固有问题,否则不应实现多线程解决方案。

那就是说,当你觉得你准备转向并行算法时,使用称为APM(异步编程模型)的模式,在那里你产生工作线程并让它们通过回调方法通知主线程(即事件代理) )。

杰弗里里希特解释说:Implementing the CLR Asynchronous Programming Model