WaitResponseQueue队列执行委托

控制台执行主方法

 1     while (true)
 2     {
 3         Thread.Sleep(100);
 4         //生成队列的key值
 5         var key = Guid.NewGuid().ToString();
 6         //标记插入队列key值顺序
 7         Console.WriteLine("输入K:" + key);
 8         //异步执行队列插入、读取操作
 9         Task.Run(() =>
10         {
11             var com = new Communication();
12             //添加队列
13             com.AddQueue(key);
14             //执行队列
15             com.RunQueue(key);
16         });
17 
18     }

添加队列

 1         /// <summary>
 2         /// 添加委托方法到执行队列
 3         /// </summary>
 4         /// <param name="key">队列的key值</param>
 5         /// <returns></returns>
 6         public string AddQueue(string key)
 7         {
 8 
 9             WaitResponseQueue.Add(key, (response) =>
10             {
11                 //执行等待的时间数组
12                 int[] waitTimeList = new[] { 20, 10, 50 };
13                 //从数组随机抽取等待时间
14                 var waitTime = waitTimeList.OrderBy(o => Guid.NewGuid()).FirstOrDefault();
15                 //等待
16                 Thread.Sleep(waitTime);
17                 //执行
18                 Console.WriteLine(response);
19 
20 
21             });
22 
23             return key;
24         }

运行队列

 1         /// <summary>
 2         /// 运行队列
 3         /// </summary>
 4         /// <param name="Key"></param>
 5         public void RunQueue(string Key)
 6         {
 7             Thread.Sleep(500);
 8             //取出委托方法
 9             var responseCallBackFunc = WaitResponseQueue[Key];
10             //删除字典用的队列
11             WaitResponseQueue.Remove(Key);
12             //执行队列方法
13             responseCallBackFunc.Invoke(Key);
14         }

输出结果

 1 输入K:b9bd2d63-7e7c-4465-b99e-6a1cfc57a0a1
 2 输入K:03522730-fb07-4ca5-b7b6-85ac7152a6d4
 3 输入K:c58c23db-0494-47f4-8f8a-73b940d01401
 4 输入K:b0440b48-6803-4b03-8e3e-95d252a63292
 5 输入K:e6a777c2-7f7f-4c03-958b-2b97aad3866c
 6 输入K:47ea59bf-ad4e-4cb7-b792-70b36aab8a25
 7 b9bd2d63-7e7c-4465-b99e-6a1cfc57a0a1
 8 输入K:09c820fd-5245-4704-b1ef-65834c8cf445
 9 03522730-fb07-4ca5-b7b6-85ac7152a6d4
10 c58c23db-0494-47f4-8f8a-73b940d01401
11 输入K:ecf99839-dcd2-4dbb-8041-80fb4dbbfee4
12 输入K:fb0238bb-eafa-4fc0-bfe1-5e7cf231dbd1
13 b0440b48-6803-4b03-8e3e-95d252a63292
14 输入K:adbf0179-909e-4600-ae84-a30bc1de32ae
15 e6a777c2-7f7f-4c03-958b-2b97aad3866c
16 输入K:0e55a56c-2746-4ea4-8cf2-95701b3858b9
17 47ea59bf-ad4e-4cb7-b792-70b36aab8a25
18 输入K:dbc60c3b-cd49-4d36-b33f-6e46b896d29a
19 09c820fd-5245-4704-b1ef-65834c8cf445
20 ecf99839-dcd2-4dbb-8041-80fb4dbbfee4
21 输入K:5bda1aaa-91fb-400c-aec3-974d9b79727f
22 输入K:2ca5f799-b766-4633-9b90-0f8e835521d3
23 fb0238bb-eafa-4fc0-bfe1-5e7cf231dbd1
24 adbf0179-909e-4600-ae84-a30bc1de32ae
25 输入K:3358fc4c-7074-4bf5-bd90-f43bd1370a4b
26 输入K:473d4d16-ab24-45f8-8961-6303463913b7
27 0e55a56c-2746-4ea4-8cf2-95701b3858b9

由此可看出队列执行方法是同步执行,在不阻塞生产的前提下,按照队列内的顺序依次委托进行消费

 注意:不要和异步编程搞混,异步编程参考地址:http://www.skcircle.com/?id=1842

posted @ 2023-06-12 15:39  Fast & Furious  阅读(38)  评论(0)    收藏  举报