Gibt es eine Möglichkeit, wie ich eine Erweiterungsmethode asynchron machen kann?
Ich habe mich schon eine Weile umgeschaut, aber noch nichts gefunden. Werde weiter nachsehen ...
Um eine Methode asynchron zu machen, senden Sie der Methode einen Callback und lassen Sie die Methode einen neuen Thread erzeugen.
Ich habe eine kurze Probe in .net 3.5 (vielleicht Jon zeigt uns eine 4.0-Probe):
%Vor%Ich denke, dass sie versuchen, das zu beheben. Es ist sowieso einfach genug zu arbeiten. Hier ist, wie Sie es tun:
Nehmen wir an, die asynchrone Methode, die Sie in eine Erweiterung einfügen möchten, sieht folgendermaßen aus:
%Vor% Der VS wird sich nicht darüber aufregen, er wird gut kompilieren. Wenn Sie jedoch versuchen, "MyString".DoAsynchronousWork()
aufzurufen, wird ein Fehler ausgegeben, der besagt, dass ein Zeichenfolgenparameter fehlt. Es ignoriert also nicht vollständig die Tatsache, dass es sich um eine Erweiterung handelt, aber es benötigt immer noch den Parameter "this"!
Glücklicherweise ist es einfach, dies zu umgehen. Ersetzen Sie einfach DoAsynchronousWork
durch Folgendes:
Ich hoffe, dass sie das beheben, bevor sie .NET 4.5 veröffentlichen, aber wenn nicht, dann ist es zumindest einfach, zu arbeiten. (Ich entdeckte, dass Lambdas zufällig asynchron sein können, aber jetzt kommt es sehr praktisch!)
In einer tangential verwandten Anmerkung bietet Reactive Extensions for .NET erweiterte Erweiterungsmethoden, die dabei helfen asynchrone Programmierung. .NET 4 hat auch die Task Parallel Library (auf die Jon angespielt hat), die bei der Parallelisierung helfen kann gemeinsame Vorgänge bei Sammlungen und vereinfacht im Allgemeinen die Verbreitung von Ausnahmen (sogar die Zusammenfassung von Ausnahmen über mehrere Aufgaben hinweg), die Koordination zwischen mehreren parallelen Aufgaben, die ihre Ergebnisse kombinieren müssen, die Unterstützung für Stornierungen und andere komplexe Verhaltensweisen.
Tags und Links .net c# winforms asynchronous