Joh*_*ohn 3 f# system.reactive
我正在学习RX(Reactive Extensions),并且发现有人在近一年前使用F#和RX发布了一些代码来制作一个简单的webCrawler.我试着看看我是否可以重用代码.我下载了RX,并创建了一个F#windows应用程序,添加了对System.Reactive的引用.我的IDE是VS 2010 Ultimate,RX版本是:1.1.11111.以下是代码:
#light
open System
open System.Linq
open System.Collections.Generic
open System.Net
open System.IO
open System.Threading
open System.Text.RegularExpressions
open System.Reactive
open System.Reactive.Linq
let create f =
Observable.Create<_>(fun x ->
f x
new System.Action((fun () -> ())))
let ofAsync async =
create (fun obs -> Async.StartWithContinuations(async, obs.OnNext,obs.OnError,obs.OnError))
let fromEvent (event:IEvent<_,_>) = create (fun x -> event.Add x.OnNext)
let tickEvent = new Event<unit> ()
let tickEventObs = tickEvent.Publish |> fromEvent
let fetch(url:string) =
async { let req = WebRequest.Create(url)
let! resp = req.AsyncGetResponse()
let stream = resp.GetResponseStream()
let reader = new StreamReader(stream)
let! html = reader.AsyncReadToEnd()
return html
} |> ofAsync
Run Code Online (Sandbox Code Playgroud)
但代码无法编译,我收到错误消息:错误1字段,构造函数或成员'AsyncReadToEnd'未定义所以错误是在这一行:
let! html = reader.AsyncReadToEnd()
Run Code Online (Sandbox Code Playgroud)
我想在过去的一年中,RX或F#可能会有一些变化.对于我目前的环境,重写上述代码的正确方法是什么?谢谢,祝大家新年快乐!约翰
AsyncReadToEnd()扩展方法现在StreamReader是FSharpPowerPack的一部分.从安装FSharpPowerPack 这个链接,如果没有,则添加引用FSharp.PowerPack到您的项目.这应该AsyncReadToEnd()可以从其余代码访问方法.
| 归档时间: |
|
| 查看次数: |
1132 次 |
| 最近记录: |