可观察到fromasyncpattern悬挂UI
-
29-09-2019 - |
题
最近,我决定与Windows Phone 7的RX(反应性扩展)合作,并遇到了一些奇怪的行为。
例如,我有这个代码:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://whatismyip.org/");
request.Method = "GET";
var x = from c in Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse)()
select c;
WebResponse r = x.First();
Debug.WriteLine(r.ContentType.ToString());
我要弄清楚的是为什么当我到达LINQ查询时,它会悬挂UI,并且不会进一步发展。有任何想法吗?
解决方案
AFAIK,首先打电话是阻止的,因此只有在收到响应后才能恢复执行。尝试用
x.Take(1).Subscribe(r => Debug.WriteLine(r.ContentType.ToString()));
其他提示
我将在这种情况下更重要的一件事。如前所述,首先是阻止调用。为了解决以下评论,即使用first()时永远不会收到响应,在Silverlight中意识到,在接收网络数据时实际使用了UI线程(调度程序)。因此,通过首先使用,您可以阻止UI线程接收响应UI线程正在等待。在Silverlight中,至关重要的是,不要出于任何原因永远不会阻止UI线程。
Desco是正确的 First()
阻止。在RX中,您需要一直保持反应性,否则您必须阻止某个地方。
不隶属于 StackOverflow