Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 监视多线程应用程序_C#_Multithreading - Fatal编程技术网

C# 监视多线程应用程序

C# 监视多线程应用程序,c#,multithreading,C#,Multithreading,我正在编写一个多线程应用程序(使用C#),其中每个线程的任务是向数据库中插入一些数据。一旦线程完成了将数据插入数据库的工作,它就变得空闲(即准备将另一个数据插入数据库)。所有线程都在从队列读取数据 问题是,如何监控哪个线程已完成其当前作业并准备好执行第二个作业?我们是否可以使用C#task代替线程,以及如何使用 请注意,每个线程都在向同一数据库插入数据 问题是,如何监视哪个线程已完成其当前作业,以及 准备好接受第二份工作了吗 你为什么要那样做?创建的线程正在循环,直到没有数据为止。如果没有线程(

我正在编写一个多线程应用程序(使用C#),其中每个线程的任务是向数据库中插入一些数据。一旦线程完成了将数据插入数据库的工作,它就变得空闲(即准备将另一个数据插入数据库)。所有线程都在从队列读取数据

问题是,如何监控哪个线程已完成其当前作业并准备好执行第二个作业?我们是否可以使用C#task代替线程,以及如何使用

请注意,每个线程都在向同一数据库插入数据

问题是,如何监视哪个线程已完成其当前作业,以及 准备好接受第二份工作了吗

你为什么要那样做?创建的线程正在循环,直到没有数据为止。如果没有线程(或少于需要的线程)并且数据到达,则启动新的线程/任务。实际使用任务。没有必要监视它们。这将是荒谬的效率低下

我们是否可以使用C#task代替线程,以及如何使用


是的,这就像“查找如何开始一项任务,谷歌对此有答案”一样简单。也就是说,您的体系结构可能需要调整-并行执行太多的操作只会浪费内存,而不是将活动线程/任务的数量限制在特定的数量。

在我看来,您应该只使用任务,而不是“线程中的任务”。 任务更加灵活,并且已经得到了有力的执行。在您的情况下,您可以创建一个任务[](如果需要,可以创建10个任务),要知道该任务是否已完成其工作,您可以检查Task.Result值(如果已声明任务对象)


通过这种方式,您可以在异步执行期间直接控制进程,包括异常处理。

我的队列中有10k数据,线程数量有限(比如10个线程)。如何有效地处理所有数据并将其插入数据库?假设一个线程需要2秒将一个数据插入数据库,那么在20k秒内将插入10k数据(时间太长),我不希望这样。这就是为什么我创建了10个线程,而不是一个接一个地创建。从“你只有很少的数据”开始(我通常做批量插入,每次调用60.000行),如果你的线程需要2秒来获取一个数据,那么就启动程序员。如何执行批量插入,每次调用60行?每次调用60行?基本SQL?您知道可以用一条insert语句插入多行吗?这是初学者SQL,与基本插入相同。认真地对于很多行,总是有SqlBulkCopy。我从来没说过60岁。我说六万。