相同方法中的ThreadPool异步线程
|
我有一个关于ThreadPool使用的问题。
在我运行下面的简单代码之后。我得到结果:
编号:6-> A
ID:13-> A
编号:6-> 2A
ID:12-> A
ID:13-> 2A
ID:15-> A
编号:6-> 3A
ID:12-> 2A
ID:14-> A
ID:13-> 3A
(继续...)
这是我的代码:
static void Main(string[] args)
{
Program p = new Program();
p.Start();
Console.ReadLine();
}
private void Start()
{
System.Timers.Timer senderTimer;
senderTimer = new System.Timers.Timer();
senderTimer.Elapsed += new System.Timers.ElapsedEventHandler(SenderTimer);
senderTimer.Interval = 500;
senderTimer.Enabled = true;
}
private void SenderTimer(object Source, ElapsedEventArgs e)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(Foo));
}
private void Foo(object state)
{
string[] array = new string[] { \"A\", \"2A\", \"3A\", \"4A\", \"5A\", \"6A\", \"7A\", \"8A\", \"9A\", \"10A\" };
for (int i = 0; i < array.Length; i++)
{
Trace.WriteLine(\"ID : \" + Thread.CurrentThread.GetHashCode() + \" --> \" + array[i]);
Thread.Sleep(1000); // Here I have a DB Operation, so i make it sleep
}
}
结果,我需要得到的是多个线程在做同一件事。
这是我必须获得的输出:希望我解释清楚。有没有办法做到这一点?
编号:6-> A
ID:13-> 2A
编号:6-> 3A
ID:12-> 4A
ID:13-> 5A
ID:15-> 6A
编号:6-> 7A
ID:12-> 8A
ID:14-> 9A
编号:13-> 10A
感谢任何帮助。非常感谢。
没有找到相关结果
已邀请:
2 个回复
惜堡沁戚
抚驰
,它将返回数组中尚未处理的下一项。然后,在您的
函数中,调用类似
由于每个线程都需要确保正确捕获下一个项目,因此需要锁定。重要说明:在确保所需功能的同时,锁定整个功能并不适合多线程。使用这种方法,它也可能是串行的。如果可以以任意顺序执行每项工作,则线程化确实会给您带来好处,在这里不是这种情况。如果您确实需要输出“ \\\\\\\\\\\\\\\\\\\\\\,\,\,\“,\”,\“,” \“,” A,2A,3A \“,则最好以串行方式进行。如果可以出现\“ 2A,A,3A \”或随机顺序,并且预期每个项目仅显示一次,则您需要线程化。