C# 如何使用多线程实现这一点?
因此,我将阅读用户信息的数组列表,并使用它执行一些任务 e、 gC# 如何使用多线程实现这一点?,c#,multithreading,C#,Multithreading,因此,我将阅读用户信息的数组列表,并使用它执行一些任务 e、 g for(int i=0;i { Thread.CurrentThread.IsBackground=true; …这里有些任务需要4-5分钟 }).Start(); } arraylist数据如下所示: 用户,信息,信息 用户2,信息,信息 用户3,信息,信息 用户,信息,信息 正如您在第4行中看到的,第1个用户再次重复 现在我想要的是某种方法来检测是否已经有线程在为用户运行。就像有2个线程为用户运行一样(第1行和第4行)。这不
for(int i=0;i
{
Thread.CurrentThread.IsBackground=true;
…这里有些任务需要4-5分钟
}).Start();
}
arraylist数据如下所示:
用户,信息,信息
用户2,信息,信息
用户3,信息,信息
用户,信息,信息
正如您在第4行中看到的,第1个用户再次重复
现在我想要的是某种方法来检测是否已经有线程在为用户运行。就像有2个线程为用户运行一样(第1行和第4行)。这不应该发生
我想做的是创建一个包含当前线程正在运行的所有用户的arraylist,并在每次创建新线程时检查该arraylist。如果是,请等待该线程完成,然后启动该线程
ArrayList al = new ArrayList();
foreach (var item in al)
{
**var obj = item;**
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
//...some task over here which would take 4 - 5 minutes
}).Start(**obj**);
}
但是有更好的方法吗?在循环中,只需将该项复制到一个新变量(以解决闭包问题)并将其传递给线程即可
Parallel.ForEach(lines.GroupBy(line => line.TheUser), grp => {
// processing user grp.Key
foreach(var line in grp) {
// do the stuff here
}
});
ArrayList al = new ArrayList();
foreach (var item in al)
{
**var obj = item;**
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
//...some task over here which would take 4 - 5 minutes
}).Start(**obj**);
}
行
是否为第一个用户
包含重复项?@Dennis不是重复项,而是要处理关于第一个用户的一些其他信息。问题不在于闭包,而在于包含同一用户项的数组,OP希望检查该用户是否已经存在运行线程。但我如何单独访问这些组?比如,我如何将组1运行到一个线程中,将组2运行到另一个线程中,将组3运行到另一个线程中…@SidharthJain这正是并行的ForEach
所做的,但要明智(例如,不要打开一个愚蠢的线程数)@SidharthJain请告诉我你到底反对什么?你问我如何让它们进入线程,我解释说这就是Parallel.ForEach
所做的。不多不少。你太过分了。如果你认为我在攻击你,那完全是你的想象。