Windows phone 7 Observable.FromAsyncPattern:传递给BeginInvoke的参数为null

Windows phone 7 Observable.FromAsyncPattern:传递给BeginInvoke的参数为null,windows-phone-7,linq-to-sql,system.reactive,Windows Phone 7,Linq To Sql,System.reactive,我正在尝试使用Rx在WindowsPhone7.5上为linq到sql编写异步DataContext。我的想法是在DataContext中定义一个方法: IObservable<List<Fact>> GetFacts(Func<MyDataContext, IQueryable<Fact>> selector) { var selectFacts = Observable.FromAsyncPattern<MyDat

我正在尝试使用Rx在WindowsPhone7.5上为linq到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
    }
我面临的问题很奇怪。当实际调用客户端选择器(
来自数据库中的项。事实选择项
)时,其上下文中的
数据库
参数为空!因此,我显然得到了NullReferenceException。但是当调用
selectFacts
时,
db
值非空,并指向正确的实例

对这个事实有什么解释吗?如何克服它


提前谢谢。

我想你是用一种非常奇怪的方式来处理这件事的。如果要在后台运行代码并使其返回一个
IObservable
(类似于任务),则应使用
Observable.Start

IObservable<List<Fact>> factsFuture = Observable.Start(
    () => selectFacts(db).Select(query).ToList(), 
    Scheduler.ThreadPoolScheduler);
IObservable facts未来=可观察。开始(
()=>selectFacts(db).Select(query).ToList(),
调度程序(Scheduler.ThreadPoolScheduler);

好的,没关系,我找到了正确的方法,你的方法很有效。还在想我到底怎么了。。。
IObservable<List<Fact>> factsFuture = Observable.Start(
    () => selectFacts(db).Select(query).ToList(), 
    Scheduler.ThreadPoolScheduler);