Silverlight ¿Qué debe hacer un subproceso de trabajo después de terminar el trabajo?

Así que aquí está mi problema con mi aplicación de Windows Phone.
Tengo la Página 1 que puede navegar a la Página 2. En la Página 2 OnNavigateTo Hago una llamada asíncrona.
Esto parece estar bien la primera vez que ejecuto la aplicación, la llamada asíncrona crea un nuevo subproceso de trabajo y funciona para mí, lo cual es genial.
Pero me doy cuenta de que si vuelvo a la página 1 y vuelvo a invocar la página 2, aparece el problema: ahora tengo un nuevo subproceso de trabajo de la llamada asíncrona mientras que el anterior no se terminó. Entonces, hay una carrera entre los dos subprocesos de trabajo y causa un problema en mi aplicación.
No tengo control directo sobre los subprocesos, ya que se crean implícitamente mediante métodos asincrónicos.

Entonces, en este caso, ¿alguien tiene alguna sugerencia sobre cómo tratarlo o hay un patrón común para tratar este problema?

preguntado el 27 de julio de 12 a las 19:07

cuál es el error, muestra algún código por favor -

hay muchos tipos de llamadas asíncronas, pero tienden a ser pares, una llamada de tipo "comienzo" y una llamada de "finalización", y un patrón común es que la llamada final recibe un objeto IAsyncResult. -

1 Respuestas

Depende de cómo emita la solicitud asíncrona. Si estás usando decir, WebClient hacer algo como DownloadStringAsync verás que tu WebClient instancia tiene un método CancelAsync que fijará la propiedad cancelada en su Completed controlador de eventos para true. Solo llama CancelAsync cuando deje su página y pruebe esto en su controlador y debería estar bien.

// in some button handler or whereever
webClient.DownloadStringAsync("http://url.com")

void OnLeavePage(object sender, EventArgs e) {
  webClient.CancelAsync();
}

void OnCompleted(object sender, DownloadStringCompletedEventArgs e) {
  if (e.Cancelled) {
    return;
  }

  // do your handling
}

Si no tienes CancelAsync puedes pasar en un UserState objeto que tiene un Cancelled propiedad para emular el comportamiento (establecerlo en verdadero cuando salga y pruebe en su controlador).

Respondido 27 Jul 12, 19:07

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