Generische abstrakte Methode asyncron bereitstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Generische abstrakte Methode asyncron bereitstellen

    Hallo!

    Ich bin noch ein ziemlicher Neuling in VB .NET und werde gleich mal ins kalte Wasser geworfen.

    Momentan versuche ich eine abstrakte Basisklasse zu schreiben, die die von Ihren Kindklassen überschriebenen Methoden auch asyncron zur Verfügung stellen soll.

    Für alle die die Fragestellung nicht verstehen, hier ein Code-Beispiel:

    Quellcode

    1. Public MustInherit Class AsyncClassBase(Of T As IEntity)
    2. Public MustOverride Function Read(ByVal source As String) As T
    3. Public Function ReadAsync(ByVal source As String) As Task(Of T)
    4. ' Task mit überschriebener Read-Methode als Arbeitspaket zurückgeben.
    5. ' Aber wie?
    6. ' Eventuell etwas in der Art Return Task.Run(Of T) ?
    7. EndFunction
    8. End Class

    In C# wäre das kein Problem für mich das umzusetzen, aber in VB .NET beiße ich mir daran wirklich die Zähne aus. ;(
    Willkommen im Forum. :thumbup:

    ZaHaDum1984 schrieb:

    In C# wäre das kein Problem für mich das umzusetzen
    Dann mach es in C#.
    Wenn Du es tatsächlich in VB abliefern musst, übersetzen wir dann den laufenden C#-Code nach VB, dazu gibt es viele Automaten. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    RodFromGermany schrieb:


    Wenn Du es tatsächlich in VB abliefern musst, übersetzen wir dann den laufenden C#-Code nach VB, dazu gibt es viele Automaten. ;)

    Danke für den Tipp. :thumbsup:

    Ich habe das mal mit dem Automaten aus deiner Signatur gemacht.
    Das Brachte mich zwar auf die Lösung, allerdings war das Ergebnis nicht korrekt:

    Quellcode

    1. ...
    2. Private Shared Sub Example()
    3. ' This method runs asynchronously.
    4. Dim t As Integer = Await Task.Run(Function() Allocate())
    5. Console.WriteLine("Compute: " + t)
    6. End Sub

    Das ist das Ergebnis das mit der Automat geliefert hat. Da fehlt das Schlüsselwort Async im Methodenkopf, welches im eingegebenen C# code enthalten war. ;)
    Der Automat ist da also wohl noch etwas buggy.
    @ZaHaDum1984 Ja, das ist wohl so.
    Besser ist es, mehrere Automaten zu verwenden oder das ganze Programm vom IlSpy übersetzen zu lassen, der macht auch die Indizes in C# als [].
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!