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
asyncy lasawaitpalabras 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
asyncyawait.fuente
Los
asyncyawaitlas 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 devuelvenTaskobjetos sean más convenientes. Para hacerasync/awaitusar 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 unWebBrowsercontrol.asyncmétodos, como muchas de las funciones en la API de Win 8.En otras palabras,
async/awaites una extensión del patrón asincrónico basado en tareas . Puede encontrar una gran cantidad de información, incluidas muchas muestras, aquí .El
BackgroundWorkeres 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 elDoWorkcontrolador 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-awaites mucho más flexible queBackgroundWorker. Y si usted quiere hacer algo que se adapteBackgroundWorker, puede hacerlo conasync-awaittambié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-awaitoverBackgroundWorker.fuente