【发布时间】:2023-03-24 11:53:02
【问题描述】:
我有一个关于线程池使用的问题。 在我运行下面的简单代码之后。我得到了结果:
- ID : 6 --> A
- ID : 13 --> A
- ID : 6 --> 2A
- ID : 12 --> A
- ID : 13 --> 2A
- ID : 15 --> A
- ID : 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
}
}
我需要得到的结果是多个线程做同一件事是同步化的。 这是我必须得到的输出:希望我解释清楚。有没有办法做到这一点?
- ID : 6 --> A
- ID : 13 --> 2A
- ID : 6 --> 3A
- ID : 12 --> 4A
- ID : 13 --> 5A
- ID : 15 --> 6A
- ID : 6 --> 7A
- ID : 12 --> 8A
- ID : 14 --> 9A
- ID : 13 --> 10A
感谢任何帮助。非常感谢。
【问题讨论】:
-
为什么要让多个线程同步工作?只使用一个线程,一切都很好。
-
@PVitt:可能是因为它的功课;-)
标签: c# multithreading asynchronous threadpool