我正在编写一个多线程应用程序(使用C#),其中每个线程的工作是将一些数据插入数据库。一旦线程完成将数据插入数据库的工作,它就变得空闲(即准备将另一个数据插入数据库)。所有线程都在从队列中读取数据。
问题是,如何监控哪个线程已完成当前作业并准备好接受第二份工作?我们是否可以使用C#任务代替线程以及如何使用?
请注意每个线程都在将数据插入到同一个数据库中。
答案 0 :(得分:0)
问题是,如何监视哪个线程已完成其当前作业 准备接受第二份工作?
你为什么这样做?创建的线程循环,直到没有数据。如果没有线程(或者不需要)并且数据到达,则启动新的线程/任务。实际上使用任务。没有必要监控它们。这将是非常低效的。
我们是否可以使用C#任务代替线程以及如何使用?
是的,它就像"查找如何启动任务一样简单,谷歌有一个答案"。也就是说,您的架构可能需要调整 - 并行执行太多操作只会浪费内存,而是将活动线程/任务的数量限制为特定数量。
答案 1 :(得分:0)
在我看来,你应该只使用Task而不是“Thread in Thread”。 任务更灵活,并且已经可靠地实施。在您的情况下,您可以创建一个Task [](如果需要,可以创建10个任务)并知道任务是否已完成其工作,如果已声明Task< \ TResult>,则可以检查Task.Result值。对象。
通过这种方式,您可以在异步执行期间直接控制进程,包括异常处理。