TaskStatus Wyliczenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje bieżący etap w cyklu życia obiektu Task.
public enum class TaskStatus
public enum TaskStatus
type TaskStatus =
Public Enum TaskStatus
- Dziedziczenie
Pola
Canceled | 6 | Zadanie potwierdziło anulowanie, zgłaszając wyjątek OperationCanceledException z własnym elementem CancellationToken, gdy token był w stanie zasygnalizowanym lub token CancellationToken zadania został już zasygnalizowany przed rozpoczęciem wykonywania zadania. Aby uzyskać więcej informacji, zobacz Anulowanie zadania. |
Created | 0 | Zadanie zostało zainicjowane, ale nie zostało jeszcze zaplanowane. |
Faulted | 7 | Zadanie zostało ukończone z powodu nieobsługiwanego wyjątku. |
RanToCompletion | 5 | Wykonanie zadania zakończyło się pomyślnie. |
Running | 3 | Zadanie jest uruchomione, ale nie zostało jeszcze ukończone. |
WaitingForActivation | 1 | Zadanie oczekuje na aktywację i zaplanowanie wewnętrznie przez infrastrukturę platformy .NET. |
WaitingForChildrenToComplete | 4 | Zadanie zostało ukończone i niejawnie oczekuje na ukończenie dołączonych zadań podrzędnych. |
WaitingToRun | 2 | Zadanie zostało zaplanowane do wykonania, ale nie zostało jeszcze rozpoczęte. |
Przykłady
W poniższym przykładzie tworzonych jest 20 zadań, które będą pętli, dopóki licznik nie zostanie zwiększany do wartości 2 milionów. Gdy pierwsze 10 zadań osiągnie 2 miliony, token anulowania zostanie anulowany, a wszystkie zadania, których liczniki nie osiągnęły 2 milionów, zostaną anulowane. Następnie przykład sprawdza Task.Status właściwość każdego zadania, aby wskazać, czy zadanie zostało ukończone pomyślnie, czy zostało anulowane. W przypadku tych, które zostały ukończone, wyświetla wartość zwróconą przez zadanie.
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
var tasks = new List<Task<int>>();
var source = new CancellationTokenSource();
var token = source.Token;
int completedIterations = 0;
for (int n = 0; n <= 19; n++)
tasks.Add(Task.Run( () => { int iterations = 0;
for (int ctr = 1; ctr <= 2000000; ctr++) {
token.ThrowIfCancellationRequested();
iterations++;
}
Interlocked.Increment(ref completedIterations);
if (completedIterations >= 10)
source.Cancel();
return iterations; }, token));
Console.WriteLine("Waiting for the first 10 tasks to complete...\n");
try {
Task.WaitAll(tasks.ToArray());
}
catch (AggregateException) {
Console.WriteLine("Status of tasks:\n");
Console.WriteLine("{0,10} {1,20} {2,14:N0}", "Task Id",
"Status", "Iterations");
foreach (var t in tasks)
Console.WriteLine("{0,10} {1,20} {2,14}",
t.Id, t.Status,
t.Status != TaskStatus.Canceled ? t.Result.ToString("N0") : "n/a");
}
}
}
// The example displays output like the following:
// Waiting for the first 10 tasks to complete...
// Status of tasks:
//
// Task Id Status Iterations
// 1 RanToCompletion 2,000,000
// 2 RanToCompletion 2,000,000
// 3 RanToCompletion 2,000,000
// 4 RanToCompletion 2,000,000
// 5 RanToCompletion 2,000,000
// 6 RanToCompletion 2,000,000
// 7 RanToCompletion 2,000,000
// 8 RanToCompletion 2,000,000
// 9 RanToCompletion 2,000,000
// 10 Canceled n/a
// 11 Canceled n/a
// 12 Canceled n/a
// 13 Canceled n/a
// 14 Canceled n/a
// 15 Canceled n/a
// 16 RanToCompletion 2,000,000
// 17 Canceled n/a
// 18 Canceled n/a
// 19 Canceled n/a
// 20 Canceled n/a
Imports System.Collections.Generic
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim tasks As New List(Of Task(Of Integer))()
Dim source As New CancellationTokenSource
Dim token As CancellationToken = source.Token
Dim completedIterations As Integer = 0
For n As Integer = 0 To 19
tasks.Add(Task.Run( Function()
Dim iterations As Integer= 0
For ctr As Long = 1 To 2000000
token.ThrowIfCancellationRequested()
iterations += 1
Next
Interlocked.Increment(completedIterations)
If completedIterations >= 10 Then source.Cancel()
Return iterations
End Function, token))
Next
Console.WriteLine("Waiting for the first 10 tasks to complete... ")
Try
Task.WaitAll(tasks.ToArray())
Catch e As AggregateException
Console.WriteLine("Status of tasks:")
Console.WriteLine()
Console.WriteLine("{0,10} {1,20} {2,14}", "Task Id",
"Status", "Iterations")
For Each t In tasks
Console.WriteLine("{0,10} {1,20} {2,14}",
t.Id, t.Status,
If(t.Status <> TaskStatus.Canceled,
t.Result.ToString("N0"), "n/a"))
Next
End Try
End Sub
End Module
' The example displays output like the following:
' Waiting for the first 10 tasks to complete...
' Status of tasks:
'
' Task Id Status Iterations
' 1 RanToCompletion 2,000,000
' 2 RanToCompletion 2,000,000
' 3 RanToCompletion 2,000,000
' 4 RanToCompletion 2,000,000
' 5 RanToCompletion 2,000,000
' 6 RanToCompletion 2,000,000
' 7 RanToCompletion 2,000,000
' 8 RanToCompletion 2,000,000
' 9 RanToCompletion 2,000,000
' 10 Canceled n/a
' 11 Canceled n/a
' 12 Canceled n/a
' 13 Canceled n/a
' 14 Canceled n/a
' 15 Canceled n/a
' 16 RanToCompletion 2,000,000
' 17 Canceled n/a
' 18 Canceled n/a
' 19 Canceled n/a
' 20 Canceled n/a
Uwagi
Właściwość Task.Status zwraca element członkowski TaskStatus wyliczenia, aby wskazać bieżący stan zadania.