爲什麼Silerlight生成的WCF代理類僅提供異步調用?只有Silverlight WCF代理異步?
有,我並不真的需要異步模式(例如,在一個BackgroundWorker)
編輯情況:有時候,我需要處理的兩個結果WCF調用。如果我可以等待(該應用程序的業務允許),這兩個調用結束然後處理,但會更簡單很多,但是沒有...異步! :P
爲什麼Silerlight生成的WCF代理類僅提供異步調用?只有Silverlight WCF代理異步?
有,我並不真的需要異步模式(例如,在一個BackgroundWorker)
編輯情況:有時候,我需要處理的兩個結果WCF調用。如果我可以等待(該應用程序的業務允許),這兩個調用結束然後處理,但會更簡單很多,但是沒有...異步! :P
實際上有一個技術原因,你不能同步調用,至少從'主'瀏覽器線程,這是瀏覽器調用在同一線程上的所有插件API調用,所以如果SL是在等待網絡回調時阻止該線程,網絡回調將無法通過,並且應用程序會死鎖。也就是說,如果從不同的線程啓動同步API,也就是說,如果應用程序首先執行QueueUserWorkItem來從瀏覽器線程中取出,那麼同步API就可以正常工作 - 但是我們認爲提供同步選項並僅讓它具有唯一性一些時間工作。
據我所知,這裏的目的是讓人們很難做出錯誤的事情(從用戶界面同步IO)。如果您使用的是WCF類,則可能需要忍受它。
+1阻止Silverlight開發者在腳下自己拍攝太糟糕:-) – 2009-08-17 08:58:59
Silverlight只允許您在UI上進行網絡調用線程(不確定這可能是瀏覽器限制以及)。因此,同步IO會鎖定瀏覽器,不好的事情。 – 2009-08-17 20:14:50
「防止Silverlight開發者在腳下自己拍攝」;現在我必須等待4個異步請求才能收集數據並呈現,並且我無法在腳下自我拍攝。運行時間已經在我腳下開槍了。方便.. – 2009-08-21 14:38:37
安德烈,即使使用異步模式,通過簡化編寫代碼的方式,您可以編寫具有表達能力的代碼,易於閱讀和使用,而不會變得異常瘋狂,從而簡化了異步請求。 看看這個庫http://syncwcf.codeplex.com/
當從UI線程調用時,無法使用只引發有用異常的同步API(例如「此函數是同步的,因此它只能由非UI線程調用」),這真是令人遺憾。 – Gabe 2011-03-22 04:58:14