我有个很特殊的字典Dictionary<string,queue<action>>
里面的数据如下:
"1",{A1,A2,A3,A4}
"2",{B1,B2,B3}
"3",{C1,C2}
怎么能让 A1,B1,C1并行执行,但是A1,A2,A3,A4串行执行?
我的这个字典每10s会被调用一次。
我的代码如下:
private void CheckingQueue()
{
var queueItemList = QueueItem.ToList();
for (int i = 0; i < queueItemList.Count;i++ )
{
string fridgeID = queueItemList[i].Key;
Queue<Action> queue = queueItemList[i].Value;//这里我该如何做
}
}
用queue作为参数启动线程处理,这样将会启动三个线程并行运行,而每个线程内的queue则串行处理
private void CheckingQueue() { var queueItemList = QueueItem.ToList(); for (int i = 0; i < queueItemList.Count;i++ ) { string fridgeID = queueItemList[i].Key; Queue<Action> queue = queueItemList[i].Value; ThreadStart t = delegate { QueueExecution(queue); }; Thread(t).Start(); } } void QueueExecution(Queue<Action> queue) { foreach(Action a in queue) { a.Invoke(); } }
楼主 还没有说,A1执行失败之后 A2还要不要执行,A2执行的时候 要不要知道A1的执行结果或者说是否成功。
若需要,可以使用Task。Task可以很好的执行串行。
至于你的哈希表各个元素需要并行的话,当你使用Task的时候 只需要调用Task对象的Start方法,这个方法就会直接返回,而他task会在线程池中执行。所以 都解决啦~