在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