日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

C# 并發(fā)隊(duì)列ConcurrentQueue

 黃金屋1 2019-05-19

C# 并發(fā)隊(duì)列ConcurrentQueue

2016年03月08日 21:26:50 conquerwave 閱讀數(shù):17445

測(cè)試函數(shù)

  1. static async Task RunProgram()
  2. {
  3. var taskQueue = new ConcurrentQueue<CustomTask>();
  4. var cts = new CancellationTokenSource();
  5. //生成任務(wù)添加至并發(fā)隊(duì)列
  6. var taskSource = Task.Run(() => TaskProducer(taskQueue));
  7. //同時(shí)啟動(dòng)四個(gè)任務(wù)處理隊(duì)列中的任務(wù)
  8. Task[] processors = new Task[4];
  9. for(int i =1;i <= 4; i++)
  10. {
  11. string processId = i.ToString();
  12. processors[i - 1] = Task.Run(
  13. () => TaskProcessor(taskQueue, "Processor " + processId, cts.Token)
  14. );
  15. }
  16. await taskSource;
  17. //向任務(wù)發(fā)送取消信號(hào)
  18. cts.CancelAfter(TimeSpan.FromSeconds(2));
  19. await Task.WhenAll(processors);
  20. }

產(chǎn)生任務(wù)
  1. static async Task TaskProducer(ConcurrentQueue<CustomTask> queue)
  2. {
  3. for(int i= 0;i < 20; i++)
  4. {
  5. await Task.Delay(50);
  6. var workItem = new CustomTask { Id = i };
  7. queue.Enqueue(workItem);
  8. Console.WriteLine("task {0} has been posted", workItem.Id);
  9. }
  10. }

執(zhí)行任務(wù)
  1. static async Task TaskProcessor(ConcurrentQueue<CustomTask> queue, string name, CancellationToken token)
  2. {
  3. CustomTask workItem;
  4. bool dequeueSuccesful = false;
  5. await GetRandomDelay();
  6. do
  7. {
  8. dequeueSuccesful = queue.TryDequeue(out workItem);
  9. if (dequeueSuccesful)
  10. {
  11. Console.WriteLine("task {0} has been processed by {1}", workItem.Id, name);
  12. }
  13. await GetRandomDelay();
  14. }
  15. while (!token.IsCancellationRequested);
  16. }

  1. static Task GetRandomDelay()
  2. {
  3. int delay = new Random(DateTime.Now.Millisecond).Next(1500);
  4. return Task.Delay(delay);
  5. }
  1. class CustomTask
  2. {
  3. public int Id { get; set; }
  4. }

調(diào)用
  1. static void Main(string[] args)
  2. {
  3. Task t = RunProgram();
  4. t.Wait();
  5. Console.ReadKey();
  6. }

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多