0

Rxを使用して、WindowsPhone7.5でlinq-to-sqlの非同期DataContextを記述しようとしています。私の考えは、DataContextでメソッドを定義することです。

IObservable<List<Fact>> GetFacts(Func<MyDataContext, IQueryable<Fact>> selector)
    {
        var selectFacts = Observable.FromAsyncPattern<MyDataContext, IQueryable<Fact>>(selector.BeginInvoke, selector.EndInvoke);
        return selectFacts(db).Select((query) => query.ToList());// db variable is MyDataContext instance, and is not null during the call or later
    }

このメソッドは、次のようにクライアントコードから呼び出す必要があります。

var q = GetFacts((database) => from item in database.Facts select item)
    .ObserveOnDispatcher()
    .Do((facts) => MessageBox.Show(facts.Count.ToString()))
    .Subscribe();

私が直面している問題は非常に奇妙です。クライアントセレクター(from item in database.Facts select item)が実際に呼び出されると、そのdatabaseコンテキストのパラメーターはnullになります。したがって、明らかにNullReferenceExceptionが発生しています。ただし、selectFactsが呼び出されると、db値はnullではなく、正しいインスタンスを指します。

この事実について何か説明はありますか?それを克服する方法は?

前もって感謝します。

4

1 に答える 1

0

私はあなたがこれについて非常に奇妙な方法で行っていると思います。バックグラウンドでコードを実行し、IObservable<T>(タスクのように)コードを返すようにする場合は、次を使用する必要がありますObservable.Start

IObservable<List<Fact>> factsFuture = Observable.Start(
    () => selectFacts(db).Select(query).ToList(), 
    Scheduler.ThreadPoolScheduler);
于 2012-12-16T20:39:36.430 に答える