20 年前的 java 书籍中容易被最垃圾的说法借用的模式之一是叫做“生产者-消费者”模式的东西,有的人说“我启动两个线程,一个生产、一个消费、中间弄一个队列(或者如你所说是什么Array)”。 20年之后,至少在 .net 系统中,完全不是这样设计并发异步程序的。我们写var x = 1; Task.Run(()=>{ call(x); }); .......甚至都可以,这类代码在 .net 中又不下10种不同写法,但是至少一点是一致的,就是直接了当。 线程池本身就是队列管理,而且队列只是极其底层的一点概念(线程池有本质的高级功能)。那么传入的参数对象 x 自然地被编排到任务中,并且自然地以并发、异步形式去调用 call 方法。并且线程池是并发多线程调度的机制。用不着你自己发明什么“生产者、消费者、队列”,而且重点在于更多的必要并发多线程异步编程知识。那么纠结于“2个线程,一个 Array”这明显就是推着赶着马车进城、在.net 上学习写20年前的java代码了。
var x = 1; Task.Run(()=>{ call(x); }); .......
Queue mySyncdQ = Queue.Synchronized( new Queue());
var queue = new ConcurrentQueue<CustomerType>();
数组一旦创建,其规模就是固定的,不可变化的,所以 array肯定是在一直增长的 是不成立的 在错误的前提下,是不可能得到正确的结论的 B线程只是读取数据,并没有 lock 的必要
110,534
社区成员
642,575
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧