在Silverlight中,说,我们启动一个异步请求:在Silverlight中实现异步超时?
var request = WebRequest.Create(uri);
,然后等待通过委托的响应
request.BeginGetResponse(getResponseResult => ...
我们如何超时此waitee,提供超时错误信号而不是代表?使用计时器? (注意:.net框架中的可用超时选项在Silverlight版本中缺失)。
要处理同时到达的两条消息,我们可以引入一个Guid过滤器,然后在传递给代理的时候忽略第二条消息。或者反过来(更好),我们注册一个即将到期的Guid,这样委托人可以丢弃第二条消息 - 至少可以进行一些垃圾回收(尽管委托的内存占用量已经很小)。
接下来是我做的一些笔记。我还没有得出结论。任何帮助非常感谢。
我的查询热线将是实现一个计时器,通知回调,然后莫名其妙取消request.BeginGetResponse等待委托(...)。
注:
虽然的.NET Framework 4的工作对实现WebRequest类超时,Silverlight的版本没有。
“System.Threading.Task.Wait方法(时间跨度)”不可用或者
问题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(可能是有用的)
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(一些有用的信息。至今还没有找到了该怎么办无限等待委托)。
也许我重新发现一个问题。这些人认为这是基础课程所不能做到的。 2009年的问题不会少。请参阅:http://forums.silverlight.net/forums/p/74867/177780.aspx – sgtz
将委托放置在一个包装中,在ThreadPool中听起来像一个坏主意。 http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/6632f5f9-b650-4f16-9e8a-1a37de4970e0 – sgtz