TaskStatus Výčet

Definice

Představuje aktuální fázi v životním cyklu Task.Represents the current stage in the lifecycle of a Task.

public enum class TaskStatus
public enum TaskStatus
type TaskStatus = 
Public Enum TaskStatus
Dědičnost
TaskStatus

Pole

Canceled 6

Úloha potvrdila zrušení vyvoláním OperationCanceledException s vlastním CancellationToken, zatímco token byl ve stavu signalizace, nebo CancellationToken úlohy již byla signalizována před spuštěním úlohy.The task acknowledged cancellation by throwing an OperationCanceledException with its own CancellationToken while the token was in signaled state, or the task's CancellationToken was already signaled before the task started executing. Další informace najdete v tématu zrušení úlohy.For more information, see Task Cancellation.

Created 0

Úloha byla inicializována, ale ještě nebyla naplánována.The task has been initialized but has not yet been scheduled.

Faulted 7

Úloha byla dokončena z důvodu neošetřené výjimky.The task completed due to an unhandled exception.

RanToCompletion 5

Úloha úspěšně dokončila provádění.The task completed execution successfully.

Running 3

Úloha je spuštěna, ale ještě nebyla dokončena.The task is running but has not yet completed.

WaitingForActivation 1

Úloha čeká na aktivaci a interní Naplánování infrastruktury .NET Framework.The task is waiting to be activated and scheduled internally by the .NET Framework infrastructure.

WaitingForChildrenToComplete 4

Úloha byla dokončena a je implicitně čeká na dokončení připojených podřízených úloh.The task has finished executing and is implicitly waiting for attached child tasks to complete.

WaitingToRun 2

Úloha byla naplánována k provedení, ale ještě nebyla spuštěna.The task has been scheduled for execution but has not yet begun executing.

Příklady

Následující příklad vytvoří 20 úkolů, které se budou opakovat až po zvýšení čítače na hodnotu 2 000 000.The following example creates 20 tasks that will loop until a counter is incremented to a value of 2 million. Když se dosáhne prvních 10 úkolů 2 000 000, zruší se token zrušení a všechny úlohy, jejichž čítače nebyly dosaženy 2 000 000, se zruší.When the first 10 tasks reach 2 million, the cancellation token is cancelled, and any tasks whose counters have not reached 2 million are cancelled. V příkladu se pak prověřuje vlastnost Task.Status jednotlivých úloh, která značí, zda byl úkol úspěšně dokončen nebo byl zrušen.The example then examines the Task.Status property of each task to indicate whether the task has completed successfully or been cancelled. U těch, které se dokončily, zobrazuje hodnotu vrácenou úlohou.For those that have completed, it displays the value returned by the task.

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

Poznámky

Vlastnost Task.Status vrací člena TaskStatus výčtu, aby označovala aktuální stav úkolu.The Task.Status property returns a member of the TaskStatus enumeration to indicate the task's current status.

Platí pro

Viz také