Momentan arbeite ich an einer Anwendung, die mit C# entwickelt wurde. Ich habe eine Frage zu Aufgaben. Ich habe meine Forschung zum Thema Aufgaben und asynchrone Programmierung gemacht. Aber ich bin immer noch nicht ganz sicher bei der Arbeit mit Aufgaben.Verwendung von Aufgaben zum Initiieren eines neuen Threads in C# -Programmierung
Diese Anwendung hat eine Methode nämlich ReadOrWriteDBTable. Diese Methode führt jede Sekunde entweder eine Lese- oder eine Einfügeoperation für eine SQL-Tabelle durch. Grundsätzlich wird diese Methode jede Sekunde aufgerufen. Zur Zeit läuft diese Methode im selben Thread wie der GUI-Thread der Anwendung. Am Anfang ist das kein Problem, weil sehr wenig Daten in der Tabelle vorhanden sind, aber wenn die Datenmenge in der Tabelle ansteigt, kann es viele Probleme auf der GUI bringen. Daher möchte ich diese Datenbankoperationen in einem anderen Thread als dem des GUI-Threads durchführen.
Das bedeutet, dass jede Sekunde die Methode ReadOrWriteDBTable über einen neuen Thread aufgerufen werden sollte. Dies bringt Multi Threading und ich glaube, es wird schwierig, den Threadpool zu verwalten. Was ich von TASKS verstanden habe, ist, dass all die komplexen Operationen von Multiple Threading komplett von einem TASK abgewickelt werden. Also habe ich das obige Problem der Mehrfach Threading mit Aufgaben in der folgenden Weise behandelt.
public int PollingTrigger
{
get
{
return this.pollingTrigger;
}
set
{
this.pollingTrigger = value;
Task.Factory.StartNew(ReadOrWriteDBTable);
}
}
Public void ReadOrWriteDBTable()
{
// Database select and update….
}
Die PollingTrigger Eigenschaft wird jede Sekunde und wiederum eine neue Aufgabe aufgerufen wird, die für das Verfahren ReadOrWriteDBTable() erstellt. Da ich keine Ergebnisse von der Aufgabe zurückgeben muss, verwende ich nicht das async- und das await-Schlüsselwort für die Aufgabe und möchte keine asynchronen Operationen ausführen. Ich würde gerne wissen, ist diese Verwendung von Aufgaben korrekt und sicher vor Ausnahmen? Wird mir das helfen, einen neuen Thread zu initiieren, wenn ein neuer Wert auf die Eigenschaft PollingTrigger gesetzt wird (in dieser Anwendung jede Sekunde)?
Es tut mir leid für solch eine detaillierte Erklärung. Ich wollte nur meine Frage klarstellen. Ich hoffe es ist klar . Freue mich auf deine Tipps oder Antworten!
Haben Sie diesen Artikel (http://blog.stephencleary.com/2012/02/async-and-await.html) schon gesehen? Könnte hilfreich sein –
Verwenden Sie Task.Run(), die sichere Kurzschrift für Task.Factory.StartNew ist, und incase von mehreren Lesevorgängen, ich denke, Sie sollten sicherstellen, dass Sie eine Art von Flag in der DB zu wissen, seine ausgewählt, aber noch nicht aktualisiert anderer Thread kommt in – brykneval