c#

位置:IT落伍者 >> c# >> 浏览文章

.NET 4.0函数式编程与协调数据结构


发布日期:2023年10月02日
 
.NET 4.0函数式编程与协调数据结构

协调数据结构(Coordination Data StructuresCDS)是在NET 中包含的一套线程安全对象其中大部分是集合类型在沉寂了个月之后这些内容终于有了重大的更新其中最明显的部分莫过于引入了函数式编程技术从而减少了设计模式的使用

一个新类型是ConcurrentLinkedList它使用一个predicate函数并配合TryInsertBetween方法以线程安全的方式插入节点这个predicate函数会被对象本身多次调用用于确定合适的插入位置这样即使在单线程的情况下它使用起来也比普通的LinkedList要方便一些

另一使用函数式技巧的地方是SpinWait对象开发人员可以向SpinWaitSpinUntil方法传递一个predicate函数而不是一遍又一遍地手动调用SpinOnce方法

下一个则是新类型ConcurrentBag这好比是一个对多线程进行附载均衡的队列集合普通情况下每个线程只对其自己的队列进行读写不过在队列为空时它就会从其它线程的队列中窃取一些元素这意味着在大多数情况下线程之间不会出现资源竞争但是每个线程在所有工作完成之前依然会全力以赴ConcurrentBag并非ConcurrentQueue的替代品后者依然是单生产者/单消费者场景下更好的选择

WriteOnce类已被移除——这个功能似乎并不怎么有用它只是在setter被访问多次的情况下抛出异常而已相比之下Lazy和LazyVariable类型更为有用一些因此它们被保留了下来这两者都体现了延迟初始化的特性(因此又被称为futures)前者是一个类而后者则是一个轻量的但并非绝对线程安全的结构此外类库中新增了LazyInitializer用于处理内存占用(memory footprint)成为问题的情况还有ThreadLocal类它可以将线程本地资源和Futures线程安全地绑定起来

安全地取消任务而不引发线程取消异常依旧是一个重要的方面为了改善这个问题每个可能会带来阻塞的方法都添加了取消的功能微软目前依然在各处引入任务取消模型这样可以大大简化类库的开发难度

上一篇:.NET 开发人员必备工具:NAnt

下一篇:C#高级编程:数据读取器[1]