Ich lerne gerade, wie man Aufgaben verwendet, async und in Windows Store ("Metro") apps warten. Ich stolperte über die Eigenschaft Task.CurrentId
und versuche zu verstehen, wie es funktioniert.
Laut MSDN gibt " Eine Ganzzahl, die vom System der aktuell ausgeführten Task "" zugewiesen wurde. Also habe ich das Hinzufügen dieses Werts zu meinem benutzerdefinierten Logger hinzugefügt, aber zu meiner Überraschung hat keine meiner Test-Apps jemals etwas anderes als null
geloggt.
Sehen Sie sich dieses Beispiel an:
%Vor% Alle diese IDs sind null
. Warum? Dieser Code erstellt Aufgaben, nicht wahr? Sollten sie keine ID haben?
Da Sie async / await
verwenden, werden alle Ihre Task.CurrentId
-Aufrufe im UI-Thread ausgeführt.
Der UI-Thread ist kein Task
, also hat er eine Null CurrentId
Wenn Sie ein Task
erstellen, wird dessen CurrentId
festgelegt:
Laut MSDN gibt es "Eine Ganzzahl, die vom System der aktuell ausgeführten Task zugewiesen wurde" zurück ... Dieser Code erstellt Aufgaben, nicht wahr? Sollten sie keine ID haben?
Der Schlüssel dort ist "gerade ausgeführt".
Es gibt zwei Arten von Task
s: Ein Typ von Task führt Code aus, und der andere Typ von Task ist nur eine abstrakte Darstellung einer Art von Operation oder Ereignis. Beispielsweise erstellt Task.Run
eine Code ausführende Aufgabe, die ihren Code in einem Thread-Pool-Thread ausführt. Task.Delay
erstellt eine Vorgangs- / Ereignisaufgabe, die beim Auslösen eines Timers abgeschlossen wird.
Die von async
Methoden zurückgegebenen Tasks stellen die Methode selbst dar, also sind sie eigentlich eine Operation / Ereignis-Task anstelle einer Codetask. Der Code in async
-Methoden kann als Delegate oder als mehrere verschiedene Aufgaben (oder eine Mischung aus beiden) ausgeführt werden. Selbst wenn Sie eine CurrentId
innerhalb einer async
-Methode erhalten (was anzeigt, dass Sie innerhalb einer Code ausführenden Aufgabe laufen), würde sich diese ID von der ID der von der Methode zurückgegebenen Aufgabe unterscheiden (was immer der Fall ist eine Operation / Ereignis-Task).
Tags und Links .net c# windows-store-apps