Vik*_*tor 1 .net c# silverlight wcf f#
我有一个WCF服务(可能是多个服务)和Silverlight(C#)中的客户端.当我在网络上的某处阅读时,F#非常适合异步和并行编程.我想尝试F#并编写一个与给定WCF服务通信的库,处理它的错误并返回结果.
除了学习新语言和函数编程之外,这样做有什么好处吗?
是的,我认为在这种情况下,F#对于异步编程非常有用.如果要正确编写异步代码,则需要使用BeginFoo/ EndFoomethods,或者需要使用基于事件的API来避免在执行某些异步调用时阻塞UI线程.因此,您无法以通常的顺序样式编写代码 - 只需执行一个接一个的操作即可.相反,您需要将所有内容包装在包含单独异常处理的回调中.
在F#中,您可以使用隐藏所有"回调"的异步工作流,并自动将所有内容包装在异常处理程序中.其结果是,你可以写异步代码,做多个呼叫为顺序码,并使用所有常用控制流结构(如try,for,while,...).你可以写:
let processData(userInputs) = async {
try
let! temp = Service.AsyncDoSomething(userInputs)
let! res = Service.AsyncDoSomethingElse(temp)
return res
with e ->
// Handle exception
Run Code Online (Sandbox Code Playgroud)
这将DoSomething异步调用操作并将函数的其余部分移动到一个回调中,该回调在操作完成时执行(类似地DoSomethingElse).但是,异常处理可以用通常的方式编写.该功能也非常适合编写一些用户界面交互(例如参见此SO帖子或伦敦用户组的F#talk录音)
使用F#进行此项目的缺点是它没有对WCF的任何直接支持.你当然可以使用它,但你必须编写C#样式的可变类,看起来不那么好 - 一个很好的选择可能是使用C#库并在那里定义通常必要的WCF东西(然后只是使用它来自F#).