博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 并发队列ConcurrentQueue
阅读量:5820 次
发布时间:2019-06-18

本文共 1756 字,大约阅读时间需要 5 分钟。

测试函数

static async Task RunProgram(){    var taskQueue = new ConcurrentQueue
(); var cts = new CancellationTokenSource(); //生成任务添加至并发队列 var taskSource = Task.Run(() => TaskProducer(taskQueue)); //同时启动四个任务处理队列中的任务 Task[] processors = new Task[4]; for(int i =1;i <= 4; i++) { string processId = i.ToString(); processors[i - 1] = Task.Run( () => TaskProcessor(taskQueue, "Processor " + processId, cts.Token) ); } await taskSource; //向任务发送取消信号 cts.CancelAfter(TimeSpan.FromSeconds(2)); await Task.WhenAll(processors);}

产生任务

static async Task TaskProducer(ConcurrentQueue
queue){ for(int i= 0;i < 20; i++) { await Task.Delay(50); var workItem = new CustomTask { Id = i }; queue.Enqueue(workItem); Console.WriteLine("task {0} has been posted", workItem.Id); }}

执行任务

static async Task TaskProcessor(ConcurrentQueue
queue, string name, CancellationToken token){ CustomTask workItem; bool dequeueSuccesful = false; await GetRandomDelay(); do { dequeueSuccesful = queue.TryDequeue(out workItem); if (dequeueSuccesful) { Console.WriteLine("task {0} has been processed by {1}", workItem.Id, name); } await GetRandomDelay(); } while (!token.IsCancellationRequested);}
static Task GetRandomDelay(){    int delay = new Random(DateTime.Now.Millisecond).Next(1500);    return Task.Delay(delay);}
class CustomTask{    public int Id { get; set; }}
static void Main(string[] args){    Task t = RunProgram();    t.Wait();    Console.ReadKey();}

https://blog.csdn.net/conquerwave/article/details/50830648

转载于:https://www.cnblogs.com/oshoh/p/9153731.html

你可能感兴趣的文章
Linux:Vim
查看>>
github page 和 hexo 搭建在线博客
查看>>
手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)
查看>>
Telnet,SSH1,SSH2,Telnet/SSL,Rlogin,Serial,TAPI,RAW
查看>>
scala VS python2 (linux or shell)
查看>>
iOS开发系列--Objective-C之协议、代码块、分类
查看>>
Android-onInterceptTouchEvent()和onTouchEvent()总结
查看>>
lintcode:strStr 字符串查找
查看>>
设置Android Studio启动时可选最近打开过的工程
查看>>
I.MX6 eMMC 中启动U-boot存放的首地址
查看>>
Codeforces Round #326 (Div. 2) B. Duff in Love 分解质因数
查看>>
从0开始学Java——JSP&Servlet——如何部署web应用程序
查看>>
劝学篇
查看>>
Java设计模式2:简单工厂模式
查看>>
LPC43xx SGPIO Pattern Match Mode
查看>>
交易应用-运行多个SQL声明
查看>>
Android SDK代理服务器解决国内不能更新下载问题
查看>>
菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)
查看>>
rhel6使用的版本数部分intel xeon处理器时间bug
查看>>
重载模块概念及意义
查看>>