繁体   English   中英

C#中的线程

[英]Threading in C#

我有控制台应用程序。 在这种情况下,我有一些过程可以通过不同的层(业务和数据访问)从数据库中获取数据。 将获取的数据存储在各个对象中。 就像为学生获取数据一样,该数据将存储(分配给)Student对象。 学校也一样。 然后他们委托一个调用特定方法,该方法根据要求生成输出。 此过程将执行多次,例如10次。 好? 我想同时运行此过程。 没有一个会开始,它将结束,然后第二个会开始。 我要在开始第1个进程之后,仅开始第2个,第3个......第10个。 意味着它应该是多线程的。 我怎样才能做到这一点? 在打开和关闭数据库连接时会给我错误吗? 我已经尝试过这个概念。 但是当线程1'st开始时,将为线程1提取数据,并将其存储在其各自的(学生,学校)对象中。 好? 当同时的第2个线程启动时,但第1个对象的数据正在改变,而控制在程序中流动。 该怎么办?

这是一些示例代码:

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.
}

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

是的,这将需要多线程,但我认为这是第一次尝试的不佳选择。 多线程很复杂,需要您“不学习”从过程编程中获得的一些知识。 同时连接到同一数据库引擎的数据库连接使此问题变得更加复杂,这可能会也可能不会提高您的性能。

看看.NET 4.0中的并行编程 尤其是并行任务库使您可以很好地控制对可能相互依赖的不同任务进行线程化。

该链接将帮助您:

点网学院

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

您需要为每个线程实例化每个类的新实例。 如果对数据库的每个调用都在修改第一次调用中的数据,则您引用的是同一实例。 多线程被认为是“高级话题”,如果可能的话,您可能希望找到另一种方法来解决此问题。

这可能会有所帮助!

启动一个作为主线程的线程,该线程依次调用所有线程1,2,3 ....并执行此逻辑以控制主线程

主线程启动..

线程1如果是第一次启动则启动,或者如果不是第一次启动则重新启动,则暂停t1

开始t2是第一次,如果不是第一次则恢复t2

t2工作完成t2暂停

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

以此类推

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

尝试这个,

除非您了解机制和内在问题,否则不应实施多线程解决方案。

就是说,当您感觉已准备好转向并行算法时,请使用称为APM(异步编程模型)的模式,在该模式中产生工作线程,并让它们通过回调方法(即事件委托)通知主线程。

Jeffrey Richter解释: 实现CLR异步编程模型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM