Я изучаю 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
Но код не может быть скомпилирован, я получил сообщение об ошибке: Ошибка 1 Поле, конструктор или член 'AsyncReadToEnd' не определены, поэтому ошибка была в этой строке:
let! html = reader.AsyncReadToEnd()
Полагаю, что за последний год в RX или F # могут произойти некоторые изменения.Для моей текущей среды, как правильно переписать приведенный выше код?Спасибо и счастливого нового года всем вам!John