Je suis nouveau dans le développement C # et souhaite créer une interface utilisateur plus réactive. Dans mes recherches préliminaires, j'ai vu deux méthodes pour y parvenir:
- Multi-threading en conjonction avec la classe BackgroundWorker.
- Les nouveaux modificateurs Async / Await.
Est-ce que plus récent signifie mieux? Quelle est la différence entre les deux méthodes? Si je souhaite créer un nouveau projet, comment choisir la méthode à suivre?
EDIT: Je devrais peut-être préciser. Je crée une application Windows Forms, où toutes les données nécessaires seront enregistrées / chargées sur le disque local. Je communiquerai également avec plusieurs périphériques USB.
c#
.net
multithreading
async
robert.ecot
la source
la source
Réponses:
Vous pourrez accomplir votre tâche en utilisant
BackgroundWorker
. C'est une classe bien connue et beaucoup de gens l'ont utilisée.Le nouveau C # 5
async
et les nouveauxawait
mots clés facilitent simplement l'écriture de code asynchrone lisible. Il peut y avoir moins de didacticiels et d'exemples sur la façon d'accomplir diverses tâches avec ces mots clés plutôt queBackgroundWorker
.À moins que vous n'ayez besoin d'utiliser une ancienne version de C #, je suggère d'apprendre à utiliser
async
etawait
.la source
Les mots clés
async
etawait
ne rendront pas votre application plus sensible à eux seuls. Ils facilitent simplement l'appel et la gestion des méthodes qui renvoient desTask
objets. Afin de créerasync
/await
utiliser réellement des threads d'arrière-plan, vous devrez combiner avec l'utilisation de choses comme:Task.Start()
- Démarre une tâche donnée en utilisant leTaskScheduler
.TaskCompletionSource
- Une façon personnalisée de gérer les tâches asynchrones. Un endroit où je l'ai utilisé était de gérer les événements provenant d'unWebBrowser
contrôle.async
méthodes, telles que la plupart des fonctions de l'API Win 8.En d'autres termes,
async
/await
est une extension du modèle asynchrone basé sur les tâches . Vous pouvez trouver une grande quantité d'informations, y compris de nombreux échantillons, ici .Il
BackgroundWorker
s'agit d'un composant WinForms qui crée 1 thread d'arrière-plan à l'aide du modèle asynchrone basé sur les événements , et vous pouvez remplir le travail effectué sur ce thread d'arrière-plan avec votre propre code dans leDoWork
gestionnaire d'événements. En général, Microsoft ne recommande plus d'utiliser ce modèle (voir le bas de la page ici ), bien que si vous le connaissez déjà, il puisse toujours être une option simple.Une autre option non mentionnée est les extensions réactives pour .NET . Ceci est un autre excellent cadre pour ajouter de la réactivité à vos applications.
la source
BackgroundWorker
, spécifiquement, est déconseillé.Je dirais que
async
-await
est beaucoup plus flexible queBackgroundWorker
. Et si vous voulez faire quelque chose qui vous convientBackgroundWorker
, vous pouvez le faire avecasync
-await
aussi, avec un code plus lisible et plus sûr.Pour cette raison, je pense que vous devriez préférer utiliser
async
-await
plutôt queBackgroundWorker
.la source