16.6 第十六章小结

728 篇文章 1 订阅
38 篇文章 0 订阅
 

16.6 第十六章小结

 

    在本章中,我们介绍了函数方式技术开发有响应的应用程序。我们首先讨论在 F# 中的一等事件,把事件当成标准的值使用,可以传递给函数,或从函数返回。这样,可以使用高阶函数(比如,Observable.filter 和 Observable.map)处理事件,使代码更具声明性,与使用高阶函数或 LINQ 查询处理列表的方式相同。

    对于更具动态的行为,这种声明的风格运行得不好。F# 提供了一种方便的替代方案,即在第 13 章中引入的异步工作流。它使写出来的流控制,看起来佝同步代码,但是,基于发生的事件执行。这种技术对于把状态机翻译成代码,特别好,通过把状态自然映射到递归调用的函数。

    最后,我们面临在应用程序中管理状态的问题,可以编码为处理图形用户界面事件的异步工作流。我们看到,这可以如何在 F# 中,通过有 MailboxProcessor<'T> 类型的消息传递进行处理。这种类型也可以用于并行的情况,所以,我们最后用一个示例显示如何从多线程应用程序中使用它。

    不幸的是,我们在这一章中看到的大部分的例子,是依靠异步工作流的,所以,它们不能真正直接转化为 C#。在 C# 中,可以使用新的 .NET 4.0 System.Threading.Tasks 命名空间,写出类似的模式。各种项目都试图提供更优雅的语法,比如,并发性和协调运行时(Concurrency and Coordination Runtime)[Richter, 2006]。然而,它们提供的都不如 F# 清晰。本章后来展示的消息传递并发性(message-passing concurrency)技术有多种不同的形式存在。F# 的实现接近于 Erlang 风格的消息传递(例如,Concurrent Programming in Erlang [Armstrong, et al., 1996]),但其他的方案也存在。其中有一个还作为 C# 2.0 的库,所以,可以看一下加入并发库(Joins Concurrency Library)[Russo, 2007]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值