Oracle-Client vs. aufgabenbasiertes asynchrones Muster (async / await)

8

Ich möchte eine Reihe von Methoden schreiben, die die Oracle-Datenbank im async / await-Modus abfragen. Da ODP.NET weder die erwarteten asynchronen Methoden noch die Begin / EndOperationName-Paare zu unterstützen scheint, welche Möglichkeiten habe ich, dies manuell zu implementieren?

Alle Beispiele für I / O-intensive asynchrone Methoden, die ich bisher gesehen habe, rufen nur andere asynchrone Methoden aus der .NET-Bibliothek auf, aber es wird kein Licht darauf geworfen, wie der Kontextwechsel intern erfolgt. Die Dokumentation besagt, dass in diesen Fällen kein separater Thread verwendet wird und der Multithread-Overhead offensichtlich nur für CPU-intensive Operationen wert ist. Ich denke, die Verwendung von Task.Run () ist keine Option, oder liege ich falsch?

    
metalheart 03.01.2013, 10:04
quelle

3 Antworten

1

Solange ich weiß, ist Oracle ODP ein Synchronisierungs-Wrapper für eine asynchrone Bibliothek. Ich habe diesen Post gefunden, als ich mich gerade gefragt habe: Wird die Einführung eines Async-Patterns für Oracle ODP-Aufrufe die Performance verbessern? (Ich verwende WCF auf IIS NET TCP).

Aber wie bereits gesagt, solange die Einführung des asynchronen Musters eine neue Aufgabe erstellt und der aufrufende Thread bereits aus dem Thread-Pool stammt, kann keine Verbesserung erreicht werden, und es wird nur so sein ein Overhead.

    
Cesc 15.01.2016 10:54
quelle
-1

Sie können immer eine Task.Factory.StartNew mit TaskCreationOptions.LongRunning verwenden, damit .NET einen neuen Thread erstellt, anstatt einen Threadpool-Thread zu verwenden. Unten ist der manuelle asynchrone Code, den Sie auf Ihre Operation anwenden können.

%Vor%     
Toan Nguyen 05.01.2013 12:45
quelle
-1

Ich benutze das

%Vor%

Jede synchrone Funktion kann asynchron ausgeführt werden, und Sie können darauf warten.

    
Demetrius Axenowski 15.09.2014 11:44
quelle