2009-08-17 16 views
8

¿Por qué las clases de proxy WCF generadas por Silerlight solo ofrecen llamadas asíncronas?Silverlight WCF Proxy async solamente?

hay casos en los que realmente no necesita el patrón asincrónico (por ejemplo en un BackgroundWorker)

EDIT: A veces necesito para procesar los resultados de dos WCF llama. Hubiera sido mucho más simple si hubiera podido esperar (el negocio de la aplicación lo permite) para que ambas llamadas finalicen y luego procedan ... pero noooo ... ¡asincrónico! : P

Respuesta

6

En realidad, hay una razón técnica por la que no se pueden sincronizar las llamadas, al menos desde el hilo del navegador "principal", que es que el navegador invoca todas las llamadas API del complemento en el mismo hilo, por lo que si SL bloquear ese hilo mientras se espera la devolución de llamada de la red, la devolución de llamada de la red no se realizará y la aplicación se estancará. Dicho esto, la API de sincronización funcionaría bien si se inicia desde un hilo diferente, es decir, si la aplicación hace primero un QueueUserWorkItem para desactivar el hilo del navegador, pero pensamos que sería confuso ofrecer la opción de sincronización y tenerla solo trabajar algunas veces

+1

Es una pena que no pueda haber una API de sincronización que arroje una excepción útil (por ejemplo, "Esta función es síncrona, por lo que solo puede invocarse mediante subprocesos que no sean UI") cuando se la llama desde un subproceso de UI. – Gabe

7

Según tengo entendido, el objetivo aquí es hacer que sea difícil para las personas hacer algo incorrecto (sincronizar IO desde la interfaz de usuario). Si está utilizando las clases de WCF, probablemente tendrá que vivir con eso.

+2

1 prevenir el dev Silverlight de tiro en el pie demasiado mal :-) –

+2

Silverlight sólo le permite realizar llamadas de red en el hilo de interfaz de usuario (no estoy seguro que esto puede ser una restricción del navegador también). Por lo tanto, la sincronización de IO bloquearía el navegador, algo malo. –

+0

"evitar que el desarrollador de Silverlight se pegue un tiro en el pie"; ahora tengo que esperar 4 solicitudes de sincronización para recopilar datos y presentarlos y no puedo dispararme en el pie. El tiempo de ejecución me ha disparado en el pie. Conveniente .. –

0

Andrei, hay métodos que incluso utilizando el patrón asíncrono, le permite escribir código expresivo, leer y mantener, sin tener que volverse loco solicitando 4 asincronizaciones, simplemente simplificando la forma en que escribe su código. dar una mirada a esta biblioteca http://syncwcf.codeplex.com/

Cuestiones relacionadas