Async-Sperre nicht erlaubt

8

Grundsätzlich möchte ich mehrere asynchrone Anfragen an einen TCP Server stellen. Ich habe derzeit einen funktionierenden Client, der nur synchron ist und die Benutzeroberfläche bei jedem Netzwerkanruf blockiert. Da mehrere Anfragen fast gleichzeitig auftreten können, habe ich Folgendes versucht:

%Vor%

Ich bin mir sicher, dass dies keine gute Verwendung von Lock ist, aber es ist die einzige Möglichkeit, die mir einfällt, dass die Anrufe warten können, bis sie an der Reihe sind. Gibt es ein Objekt, mit dem ich diese Art von Verhalten erreichen kann? Ich dachte, Monitor wäre der gleiche, also habe ich es nicht versucht (ich verstehe, dass sie Multithreading-Sachen sind, aber das ist alles, was ich kenne ...)

    
Philippe Paré 19.08.2015, 01:08
quelle

2 Antworten

15

Das Problem, das Sie haben, ist, dass Threads beim Erfassen der Sperre blockiert werden, sodass Ihre Methode nicht vollständig asynchron ist. Um dies zu beheben, können Sie SemaphoreSlim.WaitAsync

%Vor%     
Jared Moore 19.08.2015, 01:21
quelle
7

Dieses Problem wurde durch das NuGet-Paket Nito.AsyncEx , das seit August 2015 über 50.000 Downloads aufweist, ordentlich gelöst.

Von ReadMe:

  

AsyncEx Eine Hilfsbibliothek für async / await.

     

Unterstützt .NET 4.5 / 4.0, iOS, Android, Windows Store 8.0, Windows Phone   Silverlight 8.0 / 7.5, Windows Phone-Anwendungen 8.1, Silverlight   5.0 / 4.0 und alle tragbaren Bibliotheken davon.

     

[Schnipsel]

     

AsyncLock

     

Viele Entwickler beginnen mit der Verwendung dieser Bibliothek für AsyncLock, einem asynchronen Mechanismus zum gegenseitigen Ausschluss. Die Verwendung von AsyncLock ist einfach:

%Vor%

Lesen Sie den C # -Quellcode auf GitHub oder installieren Sie das NuGet-Paket Nito.AsyncEx .

    
Contango 21.08.2015 09:30
quelle

Tags und Links