首页 新闻 会员 周边 捐助

Dictionay<string,Queue<Action>>如何遍历执行?

0
悬赏园豆:50 [已关闭问题] 关闭于 2013-10-30 11:28

我有个很特殊的字典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;

             //这里我该如何做

            }
        }

程序诗人的主页 程序诗人 | 菜鸟二级 | 园豆:313
提问于:2013-10-17 21:24
< >
分享
所有回答(3)
0

用queue作为参数启动线程处理,这样将会启动三个线程并行运行,而每个线程内的queue则串行处理

诶碧司 | 园豆:1912 (小虾三级) | 2013-10-17 22:55
0
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(); 
  }
}
gunsmoke | 园豆:3592 (老鸟四级) | 2013-10-18 06:21
0

楼主 还没有说,A1执行失败之后 A2还要不要执行,A2执行的时候 要不要知道A1的执行结果或者说是否成功。

若需要,可以使用Task。Task可以很好的执行串行。

至于你的哈希表各个元素需要并行的话,当你使用Task的时候 只需要调用Task对象的Start方法,这个方法就会直接返回,而他task会在线程池中执行。所以 都解决啦~

Echofool | 园豆:175 (初学一级) | 2013-10-18 12:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册