非同期は閉鎖問題を引き起こしているWCFサービスメソッドを呼び出すためのRxを使用しました

StackOverflow https://stackoverflow.com/questions/4401566

質問

私は現在、アプリケーションページのデータを取得するためにWebサービスを呼び出して、このコードTUを使用しています。 私は最後まで最初の呼び出しを待たずに、このメソッドに行の10倍を呼び出そうとするまで、すべてが正常です。

そうは閉鎖に問題があるために私を引き起こしていると私はすべての私の結果に同じ結果オブジェクトを取得します。

誰もが前にRx.Netでこれに直面していますか?もしそうなら、私はこの問題を解決できるように、誰もがアイデアやリードを持っています。

    public void GetPage(long pageId, Action<PageDTO> observer)
    {

        Observable.FromEvent<GetPageCompletedEventArgs>(
            handler => Service.GetPageCompleted += handler,
            handler => Service.GetPageCompleted -= handler)
            .Select(eventHandler => eventHandler.EventArgs.Result)
            .Take(1) // necessary to ensure the observable unsubscribes
            .ObserveOnDispatcher() // controls which thread the observer runs on;
            .Subscribe(observer, HandleError);

        Service.GetPageAsync(pageId);
    }
役に立ちましたか?

解決

は、常に同じインスタンスServiceですか?もしそうなら、あなたはGetPageCompletedイベントは、あなたの結果がで呼び出されたすべてのメソッドのために同じである理由を説明するだろう(異なる引数を持つ)別の呼び出しによって作成されたFromEventによって処理されることにより、狂気のすべての種類に実行するつもりです同時にます。

あなたはまだ可能性が基になる接続での競合の問題に実行するでしょうがあなたは、開始/終了方法を使用して、この特定の問題を回避することができます。

public void GetPage(long pageId, Action<PageDTO> observer)
{
    Observable.FromAsyncPattern<long, PageDTO>(
            service.BeginGetAwards, service.EndGetAwards)(pageId)
        .ObserveOnDispatcher() // controls which thread the observer runs on;
        .Subscribe(observer, HandleError);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top