我有一个方法A
public static void A(参数1, 参数2,参数3)
{} //这个是处理订单的
然后问题来了,要是有1000个订单需要在很短时间内处理完,
如果不用多线程,一个一个处理的话,时间比较长,所以我想用多线程处理。。。。。。。
我该怎么做?谁能写个案例吗?
------解决思路----------------------
int orderCount = 1003;//订单数
int MaxThreadCount = 64;//开启最大线程数
int LoopCount = orderCount % MaxThreadCount == 0 ? orderCount / MaxThreadCount : orderCount / MaxThreadCount + 1;
for (int i = 0; i < LoopCount; i++)
{
ManualResetEvent[] doneEvents;
if (i == LoopCount -1)
doneEvents = new ManualResetEvent[orderCount - i * MaxThreadCount];
else
doneEvents = new ManualResetEvent[MaxThreadCount];
for (int j = 0; j < MaxThreadCount; j++)
{
doneEvents[j] = new ManualResetEvent(false);
/*
//定义订单处理类
SyncThread workThread = new SyncThread (doneEvents[j]);
*/
ThreadPool.QueueUserWorkItem(workThread.ThreadPoolCallback,参数1,参数2,参数3);
}
// Wait for all threads in pool to calculation...
WaitHandle.WaitAll(doneEvents);
}
------解决思路----------------------
找到耗时操作,然后可以将耗时操作放在多个线程来完成,避免阻塞,多线程注意同步问题,
创建线程:
http://www.cnblogs.com/gdjlc/archive/2009/12/13/2086934.html
线程同步:
http://www.cnblogs.com/michaelxu/archive/2008/09/20/1293716.html
------解决思路----------------------
你可以把处理方法改为函数,例如
public static bool A(int 参数1, string 参数2, B 参数3)
然后计算结果可以使用PLinq,例如
var result = (from x in 条件集合.AsParallel() select A(x.a, x.b, x.c)).Count();
PLinq非常干净、简洁,而且可以自动给根据CPU能力和系统资源情况而调整并发数量。对于复杂的任务,使用简洁的写法(而不是低级的底层写法),反更能提高系统设计效率。
------解决思路----------------------
涨姿势了