在 Silverlight 中实现异步超时?
在 Silverlight 中,假设我们启动一个异步请求:
var request = WebRequest.Create(uri);
然后通过委托等待响应,
request.BeginGetResponse(getResponseResult => ...
我们如何使该等待者超时,以向委托传递超时错误信号?使用定时器? (注意:Silverlight 版本中缺少 .net 框架中可用的超时选项)。
为了处理同时到达的两条消息,我们可以引入一个 Guid 过滤器,然后在第二条消息传递给委托时忽略它。或者相反(更好),我们注册一个过期的 Guid,以便委托可以丢弃第二条消息——那么至少可以进行一些垃圾收集(尽管委托的内存占用必须较小)。
以下是我做的一些笔记。我还没有得出结论。非常感谢任何帮助。
我的查询路线是实现一个计时器,通知回调,然后以某种方式取消 request.BeginGetResponse(...) 中的等待委托。
注意:
-
虽然 .Net Frame Work 4 在 WebRequest 类上实现了超时,但 Silverlight 版本却没有。
-
“System.Threading.Task.Wait Method (TimeSpan)”也不可用
问题 1:是否有更好的方法来实现同一委托目标的超时错误?
问题2:要取消等待委托,使用“request.BeginGetResponse(null)”是否足够?
问题 3:未执行的委托(例如 getResponseResult => ...)会导致少量内存泄漏吗?这只是一个小问题吗?
有关创建计时器的信息:
-
System.Windows.Threading.DispatcherTimer
-
http:// blog.bodurov.com/How-to-Create-setTimeout-Function-in-Silverlight
一些参考:
-
http://blog.bodurov.com/How -to-Create-setTimeout-Function-in-Silverlight(可能有用)
-
Silverlight,处理异步调用(无新信息)
-
http://petesbloggerama.blogspot.com/2008/07/omg-silverlight-asynchronous-is-evil.html(我想正确处理异步......我有一些很好的技术,但我想确保我干净地使用它们,可能我需要更仔细地研究代表)。
-
http://msdn.microsoft.com/en-us /library/dd460717.aspx#CommunityContent
-
http://csharperimage.jeremylikness.com/2010/03/sequential- asynchronous-workflows-in.html (一些很好的信息。仍然没有找到如何处理无限等待代表)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您想尝试一下反应式扩展,您将以低廉的价格获得超时支持。使用 Rx 时,它看起来像这样(不是确切的代码):
If you feel like giving reactive extensions a try you will get time out support for cheap. With Rx it will look something like this (not exact code):