Heim >Backend-Entwicklung >C++ >Wie kann ich parallele asynchrone Aufgaben in .NET 4.5 effizient ausführen und Ergebnisse sammeln?

Wie kann ich parallele asynchrone Aufgaben in .NET 4.5 effizient ausführen und Ergebnisse sammeln?

DDD
DDDOriginal
2025-01-13 07:16:42334Durchsuche

How Can I Efficiently Run and Collect Results from Parallel Async Tasks in .NET 4.5?

Führen Sie asynchrone Aufgaben parallel aus und sammeln Sie Ergebnisse in .NET 4.5

Einleitung:

Das gleichzeitige Ausführen lang laufender Aufgaben und das Sammeln ihrer Ergebnisse ist eine häufige Anforderung in .NET-Anwendungen. In .NET 4.5 hat sich mit der Einführung der asynchronen Programmierung der traditionelle Thread-basierte Ansatz weiterentwickelt. In diesem Artikel werden die besten Möglichkeiten zur Implementierung der parallelen Ausführung asynchroner Aufgaben in .NET 4.5 untersucht.

Originalcode:

Der bereitgestellte Code demonstriert den grundlegenden Ansatz, Task.Run() zu verwenden, um zwei lang laufende Aufgaben zu starten und dann Result zu verwenden, um ihre Ergebnisse abzurufen. Allerdings weist diese Methode einige Einschränkungen auf:

  • Sleep kann keine asynchrone Methode sein, die auf andere Methoden warten kann.
  • Der Code ist schwerfällig und nutzt die Vorteile neuer Sprachfunktionen nicht.
  • Bei der Verwendung von Result kann es zu einer Ergebnisblockierung kommen, die sich auf die Leistung auswirkt.

Ungültiger Code:

Ein Versuch, eine nicht laufende Aufgabe zu erstellen durch Aufrufen einer asynchronen Methode schlägt fehl, da die asynchrone Methode sofort mit der Ausführung beginnt.

Beste Lösung:

Die beste Lösung besteht darin, eine asynchrone Version einer Aufgabe mit langer Laufzeit zu verwenden und die Methode Task.WhenAll() zu nutzen. Ein Beispiel ist wie folgt:

<code class="language-csharp">async Task<int> LongTask1() { 
  // ...长时间运行的任务1...
  return 0; 
}

async Task<int> LongTask2() { 
  // ...长时间运行的任务2...
  return 1; 
}

// ...
{
   Task<int> t1 = LongTask1();
   Task<int> t2 = LongTask2();
   await Task.WhenAll(t1,t2);
   //现在我们可以访问t1.Result和t2.Result
}</code>

Dieser Code erstellt asynchrone Aufgaben für LongTask1 und LongTask2 und wartet dann mit Task.WhenAll() darauf, dass sie abgeschlossen werden. Dadurch können Aufgaben gleichzeitig ausgeführt werden, ohne dass sie blockiert werden. Schließlich kann über t1.Result und t2.Result auf die Ergebnisse zugegriffen werden.

Das obige ist der detaillierte Inhalt vonWie kann ich parallele asynchrone Aufgaben in .NET 4.5 effizient ausführen und Ergebnisse sammeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn