réalisant des opérations asynchrones efficaces dans .NET
La programmation asynchrone nécessite souvent une exécution de pause jusqu'à ce qu'un événement spécifique se déclenche. Les méthodes traditionnelles comme le sondage ou le blocage des fils sont inefficaces et consomment des ressources excessives. Heureusement, le .NET moderne propose des solutions supérieures à l'exécution asynchrone motivée par des événements.
Tiration de Semaphoreslim pour la synchronisation
La classe SemaphoreSlim
fournit un mécanisme de signalisation robuste. Une instance SemaphoreSlim
agit comme un signal, permettant à un fil d'attente qu'un autre thread le libère. Considérez cet exemple:
<code class="language-csharp">private SemaphoreSlim signal = new SemaphoreSlim(0, 1); // Release the signal when the "Continue" button is pressed private void ButtonContinue_Click(object sender, RoutedEventArgs e) { signal.Release(); } // Await the signal in `GetResults` private async Task GetResults() { await signal.WaitAsync(); // Proceed after signal release }</code>
Utilisation de taskcompletionsource pour la gestion des tâches
Alternativement, TaskCompletionSource
offre un moyen de créer un Task
représentant l'achèvement de l'événement. Cette tâche peut alors être attendue ailleurs dans le code. Voici une illustration:
<code class="language-csharp">private TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>(); // Complete the task when the "Continue" button is pressed private void ButtonContinue_Click(object sender, RoutedEventArgs e) { tcs.SetResult(true); } // Await the task in `GetResults` private async Task GetResults() { await tcs.Task; // Proceed after task completion }</code>
Résumé
SemaphoreSlim
et TaskCompletionSource
offrent des méthodes efficaces et motivées pour gérer des pauses et des reprise de l'exécution asynchrone en C #. Ces techniques créent un code asynchrone réactif et évolutif sans les frais généraux de l'attention occupée ou du blocage de fil.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!