¿HttpWebRequest.BeginGetResponse utiliza el bloqueo de GetResponse en el grupo de subprocesos en WP7 o Silverlight?

Estoy transfiriendo la aplicación de Android que usa REST API a la plataforma WP7.

En Android, todas las llamadas a la API REST se bloquean y utilizo manualmente los ejecutores para equilibrar los subprocesos que realizan E/S de red.

En WP7 y Silverlight, tengo que usar HttpWebRequest.BeginGetResponse y solo tiene una variante asíncrona de respuesta de lectura.

Lo es:

1) ¿Utiliza algo como la finalización asíncrona de E/S y es realmente asíncrono? o 2) ¿Solo usa operaciones de bloqueo de lectura/escritura dentro de + hilo detrás de él?

preguntado el 29 de julio de 12 a las 15:07

Por curiosidad, ¿por qué preguntas? ¿Importa? -

Como dije antes: estoy importando el código de la aplicación de Android existente que usa bloqueo de lectura + grupo de subprocesos para equilibrar las solicitudes de red, creo que portar ThreadPoolExecutor de Java a WP7 y usar mi código Java con cambios mínimos, pero si los métodos de E/S asíncrona de WP7 no realmente asíncrono (usar lectura de bloqueo oculto + subproceso) -> la aplicación WP7 portada podría tener problemas de rendimiento que quiero evitar (habrá 2 subprocesos ejecutándose al mismo tiempo en lugar de 1 para un método REST pendiente). Tener una gran cantidad de subprocesos para la aplicación del teléfono es una mala práctica, incluso si están inactivos. -

Eso tiene sentido. Gracias por la explicación. -

1 Respuestas

Acabo de verificar el código fuente usando Reflector, es una llamada de bloqueo ejecutada en el grupo de subprocesos.

public override IAsyncResult BeginGetResponse(AsyncCallback callback, object state)
{
    this.startGetResponse();
    LazyAsyncResult result = new LazyAsyncResult(this, state, callback);
    if (!ThreadPool.QueueUserWorkItem(new WaitCallback(this.asyncGetResponse), result, true))
    {
        throw new OutOfMemoryException(SR.GetString(0x49, new object[0]));
    }
    return result;
}

Respondido 29 Jul 12, 20:07

¿Puedes decirme cómo obtuviste estas fuentes descompiladas? Cuando descompilo el ensamblaje de Silverlight, solo veo stubs en los métodos (como throw NotImplementedException()); - gorecode

@gorecode: stackoverflow.com/questions/3239320/… - usuario1228

Will tiene razón en la parte "esos conjuntos solo contienen metadatos". Desafortunadamente, el ensamblaje completo no está disponible directamente con el SDK (se almacena directamente en la imagen del emulador). Los ensamblajes se pueden extraer de la imagen mediante herramientas de volcado. Puede encontrar más información en los foros de Xda-Developers. - kevin gosse

No estoy 100% seguro de que sea así en dispositivos reales. El emulador podría usar una compilación "personalizada". Intentaré examinarlo con una prueba manual en un dispositivo real y publicaré la respuesta aquí. - gorecode

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.