繁体   English   中英

Silverlight F#库和WCF

[英]Silverlight F# library and WCF

我有一个WCF服务(可能有多个服务)和一个Silverlight(C#)中的客户端。 正如我在网络上的某处所读到的那样,F#非常适合异步和并行编程。 我想尝试F#并编写一个库,该库与给定的WCF服务通信,处理它的错误并返回结果。
除了学习新语言和功能编程之外,这样做还有什么好处?

是的,我认为F#在这种情况下对于异步编程非常有用。 如果要正确编写异步代码,则需要使用BeginFoo / EndFoo方法,或者需要使用基于事件的API来避免在执行某些异步调用时阻塞UI线程。 结果,您不能以通常的顺序样式编写代码-只能执行一个接一个的操作。 相反,您需要将所有内容包装在包含单独异常处理的回调中。

在F#中,您可以使用异步工作流来隐藏所有“回调”并自动将所有内容包装在异常处理程序中。 结果,您可以编写将多个调用作为顺序代码进行调用的异步代码,并使用所有常用的控制流构造(例如tryforwhile ,...)。 你可以写:

let processData(userInputs) = async { 
  try
    let! temp = Service.AsyncDoSomething(userInputs)
    let! res = Service.AsyncDoSomethingElse(temp)
    return res
  with e ->
    // Handle exception

这将异步调用DoSomething操作,并将该函数的其余部分移到该操作完成时执行的回调中(对于DoSomethingElse同样如此)。 但是,可以以通常的方式编写异常处理。 该功能也非常适合编写一些用户界面交互(例如,请参见此SO帖子或我在伦敦用户组的F#谈话的记录)

在此项目中使用F#的缺点是它没有对WCF的任何直接支持。 您当然可以使用它,但是您必须编写C#风格的可变类,看起来并不那么好-一个不错的选择可能是使用C#库并在那里定义通常需要的WCF内容(然后使用它来自F#)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM