TaskStatus Výčet
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje aktuální fázi životního cyklu Task.
public enum class TaskStatus
public enum TaskStatus
type TaskStatus =
Public Enum TaskStatus
- Dědičnost
Pole
| Name | Hodnota | Description |
|---|---|---|
| Created | 0 | Úkol byl inicializován, ale dosud nebyl naplánován. |
| WaitingForActivation | 1 | Úloha čeká na aktivaci a naplánování interně infrastrukturou .NET. |
| WaitingToRun | 2 | Úkol byl naplánován pro spuštění, ale ještě nezačal s prováděním. |
| Running | 3 | Úloha je spuštěná, ale ještě nebyla dokončena. |
| WaitingForChildrenToComplete | 4 | Úloha se dokončila a implicitně čeká na dokončení připojených podřízených úkolů. |
| RanToCompletion | 5 | Úloha byla úspěšně dokončena. |
| Canceled | 6 | Úloha byla potvrzena zrušení vyvoláním třídy OperationCanceledException s vlastním CancellationTokenem v době, kdy byl token v signalovaném stavu, nebo již byl před spuštěním úlohy signalován zrušení úkolu. Další informace naleznete v části Zrušení úkolu. |
| Faulted | 7 | Úkol byl dokončen z důvodu neošetřené výjimky. |
Příklady
Následující příklad vytvoří 20 úkolů, které budou opakovat, dokud se čítač nezvýší na hodnotu 2 miliony. Když prvních 10 úkolů dosáhne 2 milionů, token zrušení se zruší a všechny úkoly, jejichž čítače nedosáhly 2 miliony, se zruší. Příklad pak zkontroluje Task.Status vlastnost každého úkolu a označuje, zda se úkol úspěšně dokončil nebo byl zrušen. U dokončených položek zobrazí hodnotu vrácenou úkolem.
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 vrátí člen výčtu TaskStatus , který označuje aktuální stav úkolu.