gleichzeitige asynchrone E/A -Operationen in .NET
verwalteneffizientes Umgang mit zahlreichen asynchronen Operationen ist von entscheidender Bedeutung, um die Erschöpfung der Ressourcen zu verhindern. Dieser Artikel befasst sich mit einem gemeinsamen Szenario: Durchführung paralleler HTTP -Anfragen an mehrere URLs und gleichzeitig die Anzahl der gleichzeitigen Anfragen begrenzt.
Nutzung des asynchrischen Semaphors
.NETs SemaphoreSlim
-Klass, erweitert in .NET 4.5 Beta, bietet ein effizientes asynchrones Semaphor zur Kontrolle gleichzeitiger asynchronisierter Vorgänge. So implementieren Sie es:
public async Task MyOuterMethod() { var throttler = new SemaphoreSlim(initialCount: 20); foreach (var url in urls) { await throttler.WaitAsync(); using (var client = new HttpClient()) // Added using statement for proper resource disposal { var html = await client.GetStringAsync(url); } throttler.Release(); } }
Dieser Code erstellt ein Semaphor, das maximal 20 gleichzeitige Anfragen ermöglicht. Jede HttpClient
Anfrage wartet vor der Ausführung auf die Verfügbarkeit von Semaphoren und veröffentlicht sie nach Abschluss. Beachten Sie die Hinzufügung einer using
-Antage für ordnungsgemäße HttpClient
Entsorgung.
Alternativ: TPL-basierte Aufgabenplanung
Die Aufgabe Parallel Library (TPL) bietet einen anderen Ansatz. Durch das Erstellen von Aufgaben, die an Delegierte und einen benutzerdefinierten Task -Scheduler angewendet werden, können Sie die Parallelität verwalten. MSDN enthält Beispiele für benutzerdefinierte TaskScheduler
Implementierungen für die weitere Exploration.
Vorteile des asynchrischen Semaphors
Das asynchrone Semaphor bietet wichtige Vorteile:
Zusammenfassend lässt sich sagen, dass sowohl das asynchrische Semaphor- als auch die TPL-basierte Planung die gleichzeitige asynchrone E/A-Operationen effektiv einschränken, die Ressourcennutzung optimieren und die Überlastung der Systeme verhindern. Das Async Semaphor bietet jedoch häufig eine einfachere und elegantere Lösung für viele gemeinsame Szenarien.
Das obige ist der detaillierte Inhalt vonWie kann ich die gleichzeitige asynchronische E/A -Operationen in .NET einschränken?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!