Ich frage mich nur, ob die neue Task-Klasse in dot.net 4 einen Hintergrund- oder Vordergrund-Thread erstellt.
Normalerweise würde ich "IsBackground" für einen Thread festlegen, aber für eine Aufgabe gibt es kein solches Attribut.
Ich konnte keine Dokumentation dazu auf MSDN finden :-(
Wenn Sie eine
Task<T>
Verwendung startenTask.Run()
, dann ja.Wenn Sie
async
und verwendenawait
, dann nein. Auszug von hier :"Die Schlüsselwörter async und await führen nicht dazu, dass zusätzliche Threads erstellt werden. Async-Methoden erfordern kein Multithreading, da eine asynchrone Methode nicht in einem eigenen Thread ausgeführt wird. Die Methode wird im aktuellen Synchronisationskontext ausgeführt und verwendet Zeit für den Thread Nur wenn die Methode aktiv ist. Sie können Task.Run verwenden, um CPU-gebundene Arbeit in einen Hintergrundthread zu verschieben. Ein Hintergrundthread hilft jedoch nicht bei einem Prozess, der nur darauf wartet, dass Ergebnisse verfügbar werden. "
quelle
Es scheint als Hintergrund-Thread zu laufen.
Siehe diesen Thread:
Ausführen mehrerer asynchroner C # -Aufgaben
quelle
Aufgaben werden von Threads ausgeführt, die aus dem System-Thread-Pool stammen. Ein Thread, der aus dem Thread-Pool stammt, wird standardmäßig im Hintergrund ausgeführt.
quelle
Wenn Sie noch nicht von einer Hintergrundaufgabe überzeugt sind, versuchen Sie einfach, innerhalb einer Aufgabe wie folgt auf ein GUI-Element zuzugreifen:
um die Laufzeitausnahme zu erhalten:
genau wie bei den guten alten regulären Hintergrund-Threads.
Es gibt Informationen in MSDN-Dokumenten (Stand 2017 :-), zB:
Dieses Dokument enthält sogar einen Abschnitt
What happens under the covers
.quelle