TaskStatus Enumeráció
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Az aktuális szakaszt jelöli egy Task.
public enum class TaskStatus
public enum TaskStatus
type TaskStatus =
Public Enum TaskStatus
- Öröklődés
Mezők
| Name | Érték | Description |
|---|---|---|
| Created | 0 | A tevékenység inicializálva lett, de még nincs ütemezve. |
| WaitingForActivation | 1 | A feladat arra vár, hogy a .NET infrastruktúra belsőleg aktiválja és ütemezhesse. |
| WaitingToRun | 2 | A feladat végrehajtásra van ütemezve, de még nem kezdte meg a végrehajtást. |
| Running | 3 | A feladat fut, de még nem fejeződött be. |
| WaitingForChildrenToComplete | 4 | A feladat befejeződött, és implicit módon várja a csatolt gyermekfeladatok befejezését. |
| RanToCompletion | 5 | A feladat végrehajtása sikeresen befejeződött. |
| Canceled | 6 | A tevékenység úgy nyugtázta a lemondást, hogy egy OperationCanceledException parancsot adott meg a saját CancellationToken-jével, miközben a jogkivonat jelzéssel ellátott állapotban volt, vagy a tevékenység CancellationTokenjét már a feladat végrehajtása előtt jelezték. További információ: Tevékenység lemondása. |
| Faulted | 7 | A feladat kezeletlen kivétel miatt fejeződött be. |
Példák
Az alábbi példa 20 tevékenységet hoz létre, amelyek addig ismétlődnek, amíg a számláló értéke 2 millióra nem nő. Amikor az első 10 tevékenység eléri a 2 milliót, a lemondási jogkivonat törlődik, és minden olyan tevékenység, amelynek számlálói nem érik el a 2 milliót, törölve lesznek. A példa ezután megvizsgálja az Task.Status egyes tevékenységek tulajdonságát, hogy jelezze, hogy a tevékenység sikeresen befejeződött vagy megszakadt. Azok számára, akik befejezték, megjeleníti a tevékenység által visszaadott értéket.
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
Megjegyzések
A Task.Status tulajdonság az enumerálás egy tagját adja vissza a TaskStatus tevékenység aktuális állapotának jelzéséhez.