Windows phone 7 Observable.FromAsyncPattern:传递给BeginInvoke的参数为null
我正在尝试使用Rx在WindowsPhone7.5上为linq到sql编写异步DataContext。我的想法是在DataContext中定义一个方法: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
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);