我对多线程完全不熟悉 . 我试着进行一个简单的测试,我有一个从1到100的数字列表 . 我想多线程的函数只是一个函数,将数字乘以5然后console.writeline结果
class Program {public static List data = new List(); public static void Main(string [] args){new Program() . run(); foreach(数据中的int d){Console.WriteLine(d); }
}
int multiply (int a){
return 5 * a;
}
void run()
{
int threadCount = 5;
Task[] workers = new Task[threadCount];
Task.Factory.StartNew(consumer);
for (int i = 0; i < threadCount; ++i)
{
int workerId = i;
Task task = new Task(() => worker(workerId));
workers[i] = task;
task.Start();
}
for (int i = 0; i < 100; ++i)
{
Console.WriteLine("Queueing work item {0}", i);
inputQueue.Add(i);
Thread.Sleep(50);
}
Console.WriteLine("Stopping adding.");
inputQueue.CompleteAdding();
Task.WaitAll(workers);
outputQueue.CompleteAdding();
Console.WriteLine("Done.");
Console.ReadLine();
}
void worker(int workerId)
{
Console.WriteLine("Worker {0} is starting.", workerId);
foreach (int workItem in inputQueue)
{
int b= multiply(workItem);
data.Add(b);
Console.WriteLine("Worker {0} is processing item {1}." ,workerId,b);
Thread.Sleep(100); // Simulate work.
outputQueue.Add(workItem); // Output completed item.
}
Console.WriteLine("Worker {0} is stopping.", workerId);
}
void consumer()
{
Console.WriteLine("Consumer is starting.");
foreach (var workItem in outputQueue.GetConsumingEnumerable())
{
Console.WriteLine("Consumer is using item {0}", workItem);
Thread.Sleep(25);
}
Console.WriteLine("Consumer is finished.");
}
BlockingCollection<int> inputQueue = new BlockingCollection<int>();
BlockingCollection<int> outputQueue = new BlockingCollection<int>();
}
1 回答
这是你要问的吗?