führen Sie Datenbank-Abfrage und nicht warten, für das Ergebnis
Muss ich rufen Sie eine gespeicherte Prozedur, die macht einiges an Arbeit.
Ich möchte in der Lage sein, zu "feuern und vergessen" - e.g nicht warten, für die Reaktion die gespeicherte Prozedur auf, bevor die nächste Aufzeichnung so, dass die Dinge verlangsamt und ich müssen sich schnell bewegen.
Was ist die beste Methode für den Aufruf einer stored proc in C# und wartet NICHT auf das Ergebnis, die Rückkehr ein Erfolg, status, und dann bewegen auf die nächste Platte.
Ich würde gerne in der Lage sein, um mal eben schnell eine Schleife durch mein Objekt-Liste von Auswahl und Aufruf einer Methode, die die DB nennen, ohne warten auf die Antwort, bevor das nächste Element in der Schleife.
Ist es mit C# 4.5.
Ich dachte an etwas wie
Parallel.ForEach(sqlRecordset.AsEnumerable(), recordsetRow =>
{
//get data for selection
//call DB to save without waiting for response /success/failure status
}
Aber ich weiß nicht, ob dies der beste Ansatz ist oder nicht.
Ideen?
Vielen Dank im Voraus für jede Hilfe.
- hängt, werden das erstellen einer 1000 DB-verbindungen? Sie müssen in der Lage sein, einige EZB-Kontrollen, um zu verhindern, dass eine DB-Verbindung Abfluss.
- Asynchrone Aufrufe? stackoverflow.com/questions/3288272/...
- Concurrent-queue. msdn.microsoft.com/en-us/library/dd267265.aspx
Du musst angemeldet sein, um einen Kommentar abzugeben.
Parallel.ForEach
ist parallel aber synchron - wird es warten, bis alle seine Iterationen fertig zu stellen.Können Sie verwenden TPL (Task Parallel Library) zu erreichen, was Sie wollen:
Task.Run
gibt eine Aufgabe also, wenn Sie brauchen, um etwas zu tun, wenn alle fertig sind, können Sie alle von Ihnen in ein array und verwenden Sie dannTask.WhenAll
zu erhalten-eine Aufgabe, die vollendet sein wird, wenn alle Iterationen abgeschlossen sind, ohne zu blockieren alle threads.P. S. ich weiß nicht, was du meinst mit C# 4.5, wahrscheinlich .NET 4.5 ist C# 5. Mein Beispiel-code oben funktioniert nicht mit früheren Versionen von C#.
Task
Lösung ist nicht gut, bitte? (da es sehr einfach und es funktioniert)Einfacher Ansatz ist die Nutzung von ADO.NET:
Da Sie möchten, Durchlaufen Sie die einzelnen Datensätze erhalten, einige Werte und in der Datenbank gespeichert und nicht warten, für jeden Datensatz, die Sie tun könnten, so etwas wie unten; Vorausgesetzt, Sie verwenden windows-Anwendung und wissen, threading;
Diese Weise werden Sie nicht haben, zu warten, bis die Datenbank zu reagieren und alle Werte werden gespeichert. Die threads werden zerstört, sobald es fertig stellen, speichern und verarbeiten Ihre Unterlagen..
Hoffe, das hilft.
Happy coding..!!