Task Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Stellt einen asynchronen Vorgang dar.
public ref class Task : IAsyncResult
public ref class Task : IAsyncResult, IDisposable
public class Task : IAsyncResult
public class Task : IAsyncResult, IDisposable
type Task = class
interface IAsyncResult
type Task = class
interface IAsyncResult
interface IDisposable
Public Class Task
Implements IAsyncResult
Public Class Task
Implements IAsyncResult, IDisposable
- Vererbung
-
Task
- Abgeleitet
- Implementiert
Hinweise
Weitere Informationen zu dieser API finden Sie unter Ergänzende API-Hinweise für task.
Konstruktoren
Task(Action) |
Initialisiert eine neue Task mit der angegebenen Aktion. |
Task(Action, CancellationToken) |
Initialisiert eine neue Task mit der angegebenen Aktion und CancellationToken. |
Task(Action, CancellationToken, TaskCreationOptions) |
Initialisiert eine neue Task mit den angegebenen Aktions- und Erstellungsoptionen. |
Task(Action, TaskCreationOptions) |
Initialisiert eine neue Task mit den angegebenen Aktions- und Erstellungsoptionen. |
Task(Action<Object>, Object) |
Initialisiert eine neue Task mit der angegebenen Aktion und dem angegebenen Zustand. |
Task(Action<Object>, Object, CancellationToken) |
Initialisiert eine neue Task mit der angegebenen Aktion, dem Angegebenen Zustand und CancellationToken. |
Task(Action<Object>, Object, CancellationToken, TaskCreationOptions) |
Initialisiert eine neue Task mit der angegebenen Aktion, dem Angegebenen Zustand und den Optionen. |
Task(Action<Object>, Object, TaskCreationOptions) |
Initialisiert eine neue Task mit der angegebenen Aktion, dem Angegebenen Zustand und den Optionen. |
Eigenschaften
AsyncState |
Ruft das Zustandsobjekt ab, das beim Erstellen der Task angegeben wurde, oder null, wenn keine angegeben wurde. |
CompletedTask |
Ruft eine Aufgabe ab, die bereits erfolgreich abgeschlossen wurde. |
CreationOptions |
Ruft die zum Erstellen dieser Aufgabe verwendete TaskCreationOptions ab. |
CurrentId |
Gibt die ID der derzeit ausgeführten Taskzurück. |
Exception |
Ruft die AggregateException, die dazu führte, dass die Task vorzeitig beendet wurde. Wenn die Task erfolgreich abgeschlossen wurde oder noch keine Ausnahmen ausgelöst hat, gibt dies |
Factory |
Bietet Zugriff auf Factorymethoden zum Erstellen und Konfigurieren von Task und Task<TResult> Instanzen. |
Id |
Ruft eine ID für diese Task Instanz ab. |
IsCanceled |
Ruft ab, ob diese Task Instanz die Ausführung abgeschlossen hat, da sie abgebrochen wurde. |
IsCompleted |
Ruft einen Wert ab, der angibt, ob die Aufgabe abgeschlossen wurde. |
IsCompletedSuccessfully |
Ruft ab, ob die Aufgabe abgeschlossen wurde. |
IsFaulted |
Ruft ab, ob die Task aufgrund einer unbehandelten Ausnahme abgeschlossen wurde. |
Status |
Ruft die TaskStatus dieser Aufgabe ab. |
Methoden
ConfigureAwait(Boolean) |
Konfiguriert einen Awaiter, der für dieses Taskverwendet wird. |
ConfigureAwait(ConfigureAwaitOptions) |
Konfiguriert einen Awaiter, der für dieses Taskverwendet wird. |
ContinueWith(Action<Task,Object>, Object) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen empfängt und ausgeführt wird, wenn das Ziel abgeschlossen Task. |
ContinueWith(Action<Task,Object>, Object, CancellationToken) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen und ein Abbruchtoken empfängt und asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. |
ContinueWith(Action<Task,Object>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen und ein Abbruchtoken empfängt und ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung wird basierend auf einer Reihe von angegebenen Bedingungen ausgeführt und verwendet einen angegebenen Zeitplan. |
ContinueWith(Action<Task,Object>, Object, TaskContinuationOptions) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen empfängt und ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung wird basierend auf einer Reihe von angegebenen Bedingungen ausgeführt. |
ContinueWith(Action<Task,Object>, Object, TaskScheduler) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen empfängt und asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung verwendet einen angegebenen Zeitplan. |
ContinueWith(Action<Task>) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. |
ContinueWith(Action<Task>, CancellationToken) |
Erstellt eine Fortsetzung, die ein Abbruchtoken empfängt und asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. |
ContinueWith(Action<Task>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzung, die ausgeführt wird, wenn die Zielaufgabe gemäß der angegebenen TaskContinuationOptionskonkurriert. Die Fortsetzung empfängt ein Abbruchtoken und verwendet einen angegebenen Zeitplan. |
ContinueWith(Action<Task>, TaskContinuationOptions) |
Erstellt eine Fortsetzung, die ausgeführt wird, wenn die Zielaufgabe gemäß der angegebenen TaskContinuationOptionsabgeschlossen wird. |
ContinueWith(Action<Task>, TaskScheduler) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung verwendet einen angegebenen Zeitplan. |
ContinueWith<TResult>(Func<Task,Object,TResult>, Object) |
Erstellt eine Fortsetzung, die vom Aufrufer bereitgestellte Statusinformationen empfängt und asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task und einen Wert zurückgibt. |
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task und einen Wert zurückgibt. Die Fortsetzung empfängt vom Aufrufer bereitgestellte Statusinformationen und ein Abbruchtoken. |
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzung, die basierend auf den angegebenen Vorgangsfortsetzungsoptionen ausgeführt wird, wenn das Ziel abgeschlossen Task und einen Wert zurückgibt. Die Fortsetzung empfängt vom Aufrufer bereitgestellte Statusinformationen und ein Abbruchtoken und verwendet den angegebenen Zeitplan. |
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskContinuationOptions) |
Erstellt eine Fortsetzung, die basierend auf den angegebenen Vorgangsfortsetzungsoptionen ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung empfängt vom Aufrufer bereitgestellte Statusinformationen. |
ContinueWith<TResult>(Func<Task,Object,TResult>, Object, TaskScheduler) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task. Die Fortsetzung empfängt vom Aufrufer bereitgestellte Statusinformationen und verwendet einen angegebenen Zeitplan. |
ContinueWith<TResult>(Func<Task,TResult>) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task<TResult> und einen Wert zurückgibt. |
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task und einen Wert zurückgibt. Die Fortsetzung empfängt ein Abbruchtoken. |
ContinueWith<TResult>(Func<Task,TResult>, CancellationToken, TaskContinuationOptions, TaskScheduler) |
Erstellt eine Fortsetzung, die gemäß den angegebenen Fortsetzungsoptionen ausgeführt wird und einen Wert zurückgibt. Die Fortsetzung wird ein Abbruchtoken übergeben und verwendet einen angegebenen Zeitplan. |
ContinueWith<TResult>(Func<Task,TResult>, TaskContinuationOptions) |
Erstellt eine Fortsetzung, die gemäß den angegebenen Fortsetzungsoptionen ausgeführt wird und einen Wert zurückgibt. |
ContinueWith<TResult>(Func<Task,TResult>, TaskScheduler) |
Erstellt eine Fortsetzung, die asynchron ausgeführt wird, wenn das Ziel abgeschlossen Task und einen Wert zurückgibt. Die Fortsetzung verwendet einen angegebenen Zeitplan. |
Delay(Int32) |
Erstellt eine Aufgabe, die nach einer angegebenen Anzahl von Millisekunden abgeschlossen wird. |
Delay(Int32, CancellationToken) |
Erstellt einen abbruchfähigen Vorgang, der nach einer angegebenen Anzahl von Millisekunden abgeschlossen wird. |
Delay(TimeSpan) |
Erstellt eine Aufgabe, die nach einem angegebenen Zeitintervall abgeschlossen wird. |
Delay(TimeSpan, CancellationToken) |
Erstellt einen abbruchfähigen Vorgang, der nach einem angegebenen Zeitintervall abgeschlossen wird. |
Delay(TimeSpan, TimeProvider) |
Erstellt eine Aufgabe, die nach einem angegebenen Zeitintervall abgeschlossen wird. |
Delay(TimeSpan, TimeProvider, CancellationToken) |
Erstellt einen abbruchfähigen Vorgang, der nach einem angegebenen Zeitintervall abgeschlossen wird. |
Dispose() |
Gibt alle Ressourcen frei, die von der aktuellen Instanz der Task Klasse verwendet werden. |
Dispose(Boolean) |
Entfernt die Task, wobei alle nicht verwalteten Ressourcen freigegeben werden. |
Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
FromCanceled(CancellationToken) |
Erstellt eine Task, die aufgrund des Abbruchs mit einem angegebenen Abbruchtoken abgeschlossen ist. |
FromCanceled<TResult>(CancellationToken) |
Erstellt eine Task<TResult>, die aufgrund des Abbruchs mit einem angegebenen Abbruchtoken abgeschlossen ist. |
FromException(Exception) |
Erstellt eine Task, die mit einer angegebenen Ausnahme abgeschlossen wurde. |
FromException<TResult>(Exception) |
Erstellt eine Task<TResult>, die mit einer angegebenen Ausnahme abgeschlossen ist. |
FromResult<TResult>(TResult) |
Erstellt eine Task<TResult>, die erfolgreich mit dem angegebenen Ergebnis abgeschlossen wurde. |
GetAwaiter() |
Ruft einen Awaiter ab, der für dieses Taskverwendet wird. |
GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
Run(Action) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt ein Task -Objekt zurück, das diese Arbeit darstellt. |
Run(Action, CancellationToken) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt ein Task -Objekt zurück, das diese Arbeit darstellt. Mit einem Abbruchtoken kann die Arbeit abgebrochen werden, wenn sie noch nicht gestartet wurde. |
Run(Func<Task>) |
Stellt die angegebene Arbeit, die im Threadpool ausgeführt werden soll, in die Warteschlange und gibt einen Proxy für die aufgabe zurück, die von |
Run(Func<Task>, CancellationToken) |
Stellt die angegebene Arbeit, die im Threadpool ausgeführt werden soll, in die Warteschlange und gibt einen Proxy für die aufgabe zurück, die von |
Run<TResult>(Func<Task<TResult>>) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt einen Proxy für die von |
Run<TResult>(Func<Task<TResult>>, CancellationToken) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt einen Proxy für die von |
Run<TResult>(Func<TResult>) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt ein Task<TResult> -Objekt zurück, das diese Arbeit darstellt. Mit einem Abbruchtoken kann die Arbeit abgebrochen werden, wenn sie noch nicht gestartet wurde. |
Run<TResult>(Func<TResult>, CancellationToken) |
Stellt die angegebene Arbeit in die Warteschlange, die im Threadpool ausgeführt werden soll, und gibt ein |
RunSynchronously() |
Führt die Task synchron auf dem aktuellen TaskScheduleraus. |
RunSynchronously(TaskScheduler) |
Führt die Task synchron auf dem bereitgestellten TaskScheduler aus. |
Start() |
Startet die Taskund plant sie für die Ausführung bis zur aktuellen TaskScheduler. |
Start(TaskScheduler) |
Startet die Task, und plant sie für die Ausführung an der angegebenen TaskScheduler. |
ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
Wait() |
Wartet auf den Abschluss der Ausführung des Task. |
Wait(CancellationToken) |
Wartet auf den Abschluss der Ausführung des Task. Die Wartezeit wird beendet, wenn ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen ist. |
Wait(Int32) |
Wartet, bis die Task die Ausführung innerhalb einer angegebenen Anzahl von Millisekunden abgeschlossen hat. |
Wait(Int32, CancellationToken) |
Wartet auf den Abschluss der Ausführung des Task. Die Wartezeit wird beendet, wenn ein Timeoutintervall verstrichen ist oder ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen wird. |
Wait(TimeSpan) |
Wartet, bis die Task die Ausführung innerhalb eines angegebenen Zeitintervalls abgeschlossen hat. |
Wait(TimeSpan, CancellationToken) |
Wartet auf den Abschluss der Ausführung des Task. |
WaitAll(IEnumerable<Task>, CancellationToken) |
Wartet auf alle bereitgestellten Task Objekte, bis die Ausführung abgeschlossen ist, es sei denn, die Wartezeit wird abgebrochen. |
WaitAll(ReadOnlySpan<Task>) |
Wartet auf alle bereitgestellten Task Objekte, um die Ausführung abzuschließen. |
WaitAll(Task[]) |
Wartet auf alle bereitgestellten Task Objekte, um die Ausführung abzuschließen. |
WaitAll(Task[], CancellationToken) |
Wartet auf alle bereitgestellten Task Objekte, bis die Ausführung abgeschlossen ist, es sei denn, die Wartezeit wird abgebrochen. |
WaitAll(Task[], Int32) |
Wartet auf alle bereitgestellten Task Objekte, um die Ausführung innerhalb einer angegebenen Anzahl von Millisekunden abzuschließen. |
WaitAll(Task[], Int32, CancellationToken) |
Wartet auf alle bereitgestellten Task Objekte, um die Ausführung innerhalb einer angegebenen Anzahl von Millisekunden abzuschließen oder bis die Wartezeit abgebrochen wird. |
WaitAll(Task[], TimeSpan) |
Wartet auf alle bereitgestellten abbruchbaren Task Objekte, um die Ausführung innerhalb eines angegebenen Zeitintervalls abzuschließen. |
WaitAny(Task[]) |
Wartet auf eine der bereitgestellten Task Objekte, um die Ausführung abzuschließen. |
WaitAny(Task[], CancellationToken) |
Wartet auf eine der bereitgestellten Task Objekte, bis die Ausführung abgeschlossen ist, es sei denn, die Wartezeit wird abgebrochen. |
WaitAny(Task[], Int32) |
Wartet auf eine der bereitgestellten Task Objekte, um die Ausführung innerhalb einer angegebenen Anzahl von Millisekunden abzuschließen. |
WaitAny(Task[], Int32, CancellationToken) |
Wartet auf eine der bereitgestellten Task Objekte, um die Ausführung innerhalb einer angegebenen Anzahl von Millisekunden abzuschließen oder bis ein Abbruchtoken abgebrochen wird. |
WaitAny(Task[], TimeSpan) |
Wartet auf eine der bereitgestellten Task Objekte, um die Ausführung innerhalb eines angegebenen Zeitintervalls abzuschließen. |
WaitAsync(CancellationToken) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist oder wenn die angegebene CancellationToken den Abbruch angefordert hat. |
WaitAsync(TimeSpan) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist oder wenn das angegebene Timeout abläuft. |
WaitAsync(TimeSpan, CancellationToken) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist, wann das angegebene Timeout abläuft oder wenn die angegebene CancellationToken den Abbruch angefordert hat. |
WaitAsync(TimeSpan, TimeProvider) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist oder wenn das angegebene Timeout abläuft. |
WaitAsync(TimeSpan, TimeProvider, CancellationToken) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist, wann das angegebene Timeout abläuft oder wenn die angegebene CancellationToken den Abbruch angefordert hat. |
WhenAll(IEnumerable<Task>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle Task Objekte in einer enumerationsfähigen Auflistung abgeschlossen sind. |
WhenAll(ReadOnlySpan<Task>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle bereitgestellten Vorgänge abgeschlossen wurden. |
WhenAll(Task[]) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle Task Objekte in einem Array abgeschlossen sind. |
WhenAll<TResult>(IEnumerable<Task<TResult>>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle Task<TResult> Objekte in einer enumerationsfähigen Auflistung abgeschlossen sind. |
WhenAll<TResult>(ReadOnlySpan<Task<TResult>>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle bereitgestellten Vorgänge abgeschlossen wurden. |
WhenAll<TResult>(Task<TResult>[]) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn alle Task<TResult> Objekte in einem Array abgeschlossen sind. |
WhenAny(IEnumerable<Task>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenAny(ReadOnlySpan<Task>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenAny(Task, Task) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der angegebenen Vorgänge abgeschlossen ist. |
WhenAny(Task[]) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenAny<TResult>(IEnumerable<Task<TResult>>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenAny<TResult>(ReadOnlySpan<Task<TResult>>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenAny<TResult>(Task<TResult>, Task<TResult>) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der angegebenen Vorgänge abgeschlossen ist. |
WhenAny<TResult>(Task<TResult>[]) |
Erstellt eine Aufgabe, die abgeschlossen wird, wenn eine der bereitgestellten Aufgaben abgeschlossen ist. |
WhenEach(IEnumerable<Task>) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
WhenEach(ReadOnlySpan<Task>) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
WhenEach(Task[]) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
WhenEach<TResult>(IEnumerable<Task<TResult>>) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
WhenEach<TResult>(ReadOnlySpan<Task<TResult>>) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
WhenEach<TResult>(Task<TResult>[]) |
Erstellt eine IAsyncEnumerable<T>, die die bereitgestellten Vorgänge liefert, wenn diese Aufgaben abgeschlossen sind. |
Yield() |
Erstellt eine erwartbare Aufgabe, die asynchron den aktuellen Kontext zurückgibt, wenn sie erwartet wird. |
Explizite Schnittstellenimplementierungen
IAsyncResult.AsyncWaitHandle |
Ruft eine WaitHandle ab, die verwendet werden kann, um auf den Abschluss der Aufgabe zu warten. |
IAsyncResult.CompletedSynchronously |
Ruft einen Hinweis darauf ab, ob der Vorgang synchron abgeschlossen wurde. |
Erweiterungsmethoden
WaitAsync(Task, TimeSpan, TimeProvider, CancellationToken) |
Ruft eine Task ab, die abgeschlossen wird, wenn diese Task abgeschlossen ist, wann das angegebene Timeout abläuft oder wenn die angegebene CancellationToken den Abbruch angefordert hat. |
DispatcherOperationWait(Task) |
Wartet auf unbestimmte Zeit, bis die zugrunde liegende DispatcherOperation abgeschlossen ist. |
DispatcherOperationWait(Task, TimeSpan) |
Wartet auf den angegebenen Zeitraum, bis die zugrunde liegende DispatcherOperation abgeschlossen ist. |
IsDispatcherOperationTask(Task) |
Gibt einen Wert zurück, der angibt, ob diese Task einem DispatcherOperationzugeordnet ist. |
AsAsyncAction(Task) |
Gibt eine asynchrone Windows-Runtime-Aktion zurück, die eine gestartete Aufgabe darstellt. |
Gilt für:
Threadsicherheit
Alle Elemente von Task, mit Ausnahme von Dispose(), sind threadsicher und können gleichzeitig von mehreren Threads verwendet werden.