Soy nuevo en el desarrollo de C # y deseo crear una interfaz de usuario más receptiva. En mi investigación preliminar, he visto dos métodos para lograr esto:
- Multi-threading junto con la clase BackgroundWorker.
- Los nuevos modificadores Async / Await.
¿Más nuevo significa mejor? ¿Cuál es la diferencia entre los dos métodos? Si deseo crear un nuevo proyecto, ¿cómo elijo qué método utilizar?
EDITAR: Tal vez debería especificar. Estoy creando una aplicación de Windows Forms, donde todos los datos necesarios se guardarán / cargarán en el disco local. También me comunicaré con varios dispositivos USB.
c#
.net
multithreading
async
robert.ecot
fuente
fuente
Respuestas:
Podrá realizar su tarea utilizando
BackgroundWorker
. Es una clase bien conocida, y muchas personas la han usado.El nuevo C # 5
async
y lasawait
palabras clave básicamente hacen que sea más fácil escribir código asincrónico legible. Puede haber menos tutoriales y ejemplos de cómo realizar diversas tareas con estas palabras clave en lugar de hacerloBackgroundWorker
.A menos que necesite usar una versión anterior de C #, le sugiero que aprenda a usar
async
yawait
.fuente
Los
async
yawait
las palabras clave no hará que su aplicación más sensibles por su propia cuenta. Simplemente hacen que la llamada y el manejo de métodos que devuelvenTask
objetos sean más convenientes. Para hacerasync
/await
usar hilos de fondo, necesitará combinarlos con el uso de cosas como:Task.Start()
- Inicia una tarea determinada usando elTaskScheduler
.TaskCompletionSource
- Una forma personalizada de manejar tareas asíncronas. Un lugar en el que usé esto fue para manejar eventos provenientes de unWebBrowser
control.async
métodos, como muchas de las funciones en la API de Win 8.En otras palabras,
async
/await
es una extensión del patrón asincrónico basado en tareas . Puede encontrar una gran cantidad de información, incluidas muchas muestras, aquí .El
BackgroundWorker
es un componente WinForms que crea 1 subproceso en segundo plano utilizando el patrón asíncrono basado en eventos , y puede completar el trabajo realizado en este subproceso en segundo plano con su propio código en elDoWork
controlador de eventos. En general, Microsoft ya no recomienda usar este patrón (consulte la parte inferior de la página aquí ), aunque si ya está familiarizado con él, puede ser una opción simple.Otra opción no mencionada son las extensiones reactivas para .NET . Este es otro gran marco para agregar capacidad de respuesta a sus aplicaciones.
fuente
BackgroundWorker
, específicamente, se recomienda no hacerlo .Yo diría que
async
-await
es mucho más flexible queBackgroundWorker
. Y si usted quiere hacer algo que se adapteBackgroundWorker
, puede hacerlo conasync
-await
también, con el código de seguridad de tipos más legible y más.Debido a eso, creo que debería preferir usar
async
-await
overBackgroundWorker
.fuente