RX用のC#をF#コードに変換したい。 次のC#コードです:F#RX非同期パターンを観測可能なシーケンスに変換する
Stream inputStream = Console.OpenStandardInput();
var read = Observable.FromAsyncPattern<byte[], int, int, int>
(inputStream.BeginRead, inputStream.EndRead);
byte[] someBytes = new byte[10];
IObservable<int> source = read(someBytes, 0, 10);
IDisposable subscription = source.Subscribe(
x => Console.WriteLine("OnNext: {0}", x),
ex => Console.WriteLine("OnError: {0}", ex.Message),
() => Console.WriteLine("OnCompleted"));
Console.ReadKey();
次は、F#で私のコードです:
#light
open System
open System.Collections.Generic
open System.Linq
open System.Reactive
open System.Reactive.Linq
open System.Reactive.Subjects
open System.Threading
open System.IO
let inputStream: Stream = Console.OpenStandardInput()
let read = Observable.FromAsyncPattern<byte[], int, int, int>(inputStream.BeginRead, inputStream.EndRead)
let someBytes: byte[] = Array.create 10 (byte(0))
let source: IObservable<int> = read(someBytes, 0, 10)
let subscription:IDisposable =
source.Subscribe((fun x -> printfn "OnNext %A" x),
(fun ex -> printfn "OnError %A" ex.Message),
(fun _ -> printfn "OnComplete"))
Console.ReadKey() |> ignore
しかし、私は次のコンパイラエラーを得た:
Error 1 No overloads match for method 'FromAsyncPattern'. The available overloads are shown below (or in the Error List window).
Error 2 Possible overload: 'Observable.FromAsyncPattern<'TResult>(begin: Func<AsyncCallback,obj,IAsyncResult>, end: Func<IAsyncResult,'TResult>) : Func<IObservable<'TResult>>'.
Error 3 Possible overload: 'Observable.FromAsyncPattern<'T1,'TResult>(begin: Func<'T1,AsyncCallback,obj,IAsyncResult>, end: Func<IAsyncResult,'TResult>) : Func<'T1,IObservable<'TResult>>'.
これは、コンパイラでいるようですF#はオーバーロードを認識しませんでしたが、F#コンパイラをどのようにしてスマートにするかわかりません。 あなたのコードを教えてください。 ありがとう、素敵な週末があります。 John
こんにちは、私はあなたの説明のための完全なコードを表示することができますので、私はそれをよりよく理解します。ありがとう! –
@JohnJohn - 完全な例を追加しましたが、コンピュータにRXがなくても動作することを確認しています。 – kvb
kvb:ありがとう、あなたのアドバイスに従ってコードを変更しました。 しかし、次のコンパイラエラーが発生しました。 エラー:2つの引数を取るメンバまたはオブジェクトコンストラクタ 'FromAsyncPattern'には、このコード位置からアクセスできません。メソッド 'FromAsyncPattern'のすべてのアクセス可能なバージョンは、2つの引数をとります。 –