2012-09-18 15 views
6

me han "buscado en Google", pero todavía confundido con el Grupo, Tema, y ​​trabajador de fondo .....C#/VB.Net Tarea vs vs Tema BackgroundWorker

  1. Es "tareas es una API de alto nivel que corriendo en el hilo actual "¿correcto?

  2. Si 1 es correcto, ¿por qué necesito usar invoke para cambiar la interfaz de usuario dentro de la tarea en el mismo subproceso?

  3. ¿Backgroundworker solo obtuvo la prioridad más baja en la aplicación? ¿Entonces el rendimiento de backgroundworker es más bajo que la tarea y el hilo? Correcto ?

  4. Finalmente, en mi aplicación necesito obtener una cadena del servidor usando "HttpWebRequest", después de eso analizar la cadena y actualizar la interfaz de usuario. Si uso "HttpWebRequest.BeginGetResponse" para esperar el resultado de la sincronización y desencadenar un evento completo para actualizar la UI, necesito usar el método de invocación para llamar al control de subproceso de UI, pero ¿puedo usar el trabajador de fondo en lugar de? Simplemente puedo cambiar la UI en el evento "RunWorkerCompleted", ¿hay alguna desventaja?

Lo siento por mi Inglés pool y gracias por la ayuda ...!

+0

Las tareas usan el grupo de hilos detrás de escena, no están restringidas al hilo actual que las invoca –

Respuesta

4

1) No, una tarea se ejecuta de forma predeterminada en una secuencia de grupo de subprocesos. Sin embargo, puede proporcionar otro programador que pueda ejecutar tareas de manera diferente.

3) No hay diferencia en prioridad por defecto. BackgroundWorker también se ejecuta en un subproceso de grupo de subprocesos.

4) Utilizando TaskFactory.FromAsync es una manera bastante simple de manejar peticiones web asíncronos:

Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null) 
    .ContinueWith(
     t => 
     { 
      using (var response = (HttpWebResponse)t.Result) 
      { 
       // Do your work 
      } 
     }, 
     TaskScheduler.FromCurrentSynchronizationContext() 
    ); 

Usando TaskScheduler.FromCurrentSynchronizationContext asegura que la devolución de llamada en ContinueWith se invoca en el hilo actual. Entonces, si la tarea se crea en el hilo de la interfaz de usuario, la respuesta se recuperará en segundo plano y luego se procesará en el hilo de la interfaz de usuario.

Cuestiones relacionadas