Task.Wait Metoda
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.
Czeka na Task zakończenie wykonywania.
Przeciążenia
Wait(TimeSpan, CancellationToken) |
Czeka na Task ukończenie wykonywania. |
Wait(Int32, CancellationToken) |
Czeka na Task ukończenie wykonywania. Oczekiwanie kończy się, jeśli interwał przekroczenia limitu czasu lub token anulowania zostanie anulowany przed ukończeniem zadania. |
Wait(TimeSpan) |
Czeka na Task ukończenie wykonywania w określonym przedziale czasu. |
Wait(CancellationToken) |
Czeka na Task ukończenie wykonywania. Oczekiwanie kończy się, jeśli token anulowania zostanie anulowany przed ukończeniem zadania. |
Wait() |
Czeka na Task ukończenie wykonywania. |
Wait(Int32) |
Czeka na Task ukończenie wykonywania w ramach określonej liczby milisekund. |
Wait(TimeSpan, CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task ukończenie wykonywania.
public:
bool Wait(TimeSpan timeout, System::Threading::CancellationToken cancellationToken);
public bool Wait (TimeSpan timeout, System.Threading.CancellationToken cancellationToken);
member this.Wait : TimeSpan * System.Threading.CancellationToken -> bool
Public Function Wait (timeout As TimeSpan, cancellationToken As CancellationToken) As Boolean
Parametry
- timeout
- TimeSpan
Czas oczekiwania lub InfiniteTimeSpan czas oczekiwania na czas nieokreślony
- cancellationToken
- CancellationToken
Element CancellationToken do obserwowania podczas oczekiwania na ukończenie zadania.
Zwraca
true
jeśli ukończone Task wykonanie w czasie przydzielonym; w przeciwnym razie . false
Wyjątki
timeout
jest liczbą ujemną inną niż -1 milisekund, która reprezentuje nieskończony limit czasu
-lub-
limit czasu jest większy niż MaxValue.
Element cancellationToken
został anulowany.
Dotyczy
Wait(Int32, CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task ukończenie wykonywania. Oczekiwanie kończy się, jeśli interwał przekroczenia limitu czasu lub token anulowania zostanie anulowany przed ukończeniem zadania.
public:
bool Wait(int millisecondsTimeout, System::Threading::CancellationToken cancellationToken);
public bool Wait (int millisecondsTimeout, System.Threading.CancellationToken cancellationToken);
member this.Wait : int * System.Threading.CancellationToken -> bool
Public Function Wait (millisecondsTimeout As Integer, cancellationToken As CancellationToken) As Boolean
Parametry
- cancellationToken
- CancellationToken
Token anulowania obserwowany podczas oczekiwania na ukończenie zadania.
Zwraca
true
jeśli ukończone Task wykonanie w czasie przydzielonym; w przeciwnym razie . false
Wyjątki
Element cancellationToken
został anulowany.
Został Task usunięty.
millisecondsTimeout
jest liczbą ujemną inną niż -1, która reprezentuje nieskończony limit czasu.
Zadanie zostało anulowane. Kolekcja InnerExceptions zawiera TaskCanceledException obiekt.
-lub-
Podczas wykonywania zadania został zgłoszony wyjątek. Kolekcja InnerExceptions zawiera informacje o wyjątku lub wyjątkach.
Przykłady
Poniższy przykład wywołuje Wait(Int32, CancellationToken) metodę , aby podać zarówno wartość limitu czasu, jak i token anulowania, który może zakończyć oczekiwanie na ukończenie zadania. Nowy wątek jest uruchamiany i wykonuje metodę CancelToken
, która wstrzymuje się, a następnie wywołuje metodę CancellationTokenSource.Cancel w celu anulowania tokenów anulowania. Zadanie jest następnie uruchamiane i opóźnione przez 5 sekund. Następnie Wait metoda jest wywoływana w celu oczekiwania na ukończenie zadania i jest dostarczana zarówno krótka wartość limitu czasu, jak i token anulowania.
using System;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
CancellationTokenSource ts = new CancellationTokenSource();
Thread thread = new Thread(CancelToken);
thread.Start(ts);
Task t = Task.Run( () => { Task.Delay(5000).Wait();
Console.WriteLine("Task ended delay...");
});
try {
Console.WriteLine("About to wait completion of task {0}", t.Id);
bool result = t.Wait(1510, ts.Token);
Console.WriteLine("Wait completed normally: {0}", result);
Console.WriteLine("The task status: {0:G}", t.Status);
}
catch (OperationCanceledException e) {
Console.WriteLine("{0}: The wait has been canceled. Task status: {1:G}",
e.GetType().Name, t.Status);
Thread.Sleep(4000);
Console.WriteLine("After sleeping, the task status: {0:G}", t.Status);
ts.Dispose();
}
}
private static void CancelToken(Object obj)
{
Thread.Sleep(1500);
Console.WriteLine("Canceling the cancellation token from thread {0}...",
Thread.CurrentThread.ManagedThreadId);
CancellationTokenSource source = obj as CancellationTokenSource;
if (source != null) source.Cancel();
}
}
// The example displays output like the following if the wait is canceled by
// the cancellation token:
// About to wait completion of task 1
// Canceling the cancellation token from thread 3...
// OperationCanceledException: The wait has been canceled. Task status: Running
// Task ended delay...
// After sleeping, the task status: RanToCompletion
// The example displays output like the following if the wait is canceled by
// the timeout interval expiring:
// About to wait completion of task 1
// Wait completed normally: False
// The task status: Running
// Canceling the cancellation token from thread 3...
open System
open System.Threading
open System.Threading.Tasks
let cancelToken (obj: obj) =
Thread.Sleep 1500
printfn $"Canceling the cancellation token from thread {Thread.CurrentThread.ManagedThreadId}..."
match obj with
| :? CancellationTokenSource as source -> source.Cancel()
| _ -> ()
let ts = new CancellationTokenSource()
let thread = Thread(ParameterizedThreadStart cancelToken)
thread.Start ts
let t =
Task.Run(fun () ->
Task.Delay(5000).Wait()
printfn "Task ended delay...")
try
printfn $"About to wait completion of task {t.Id}"
let result = t.Wait(1510, ts.Token)
printfn $"Wait completed normally: {result}"
printfn $"The task status: {t.Status:G}"
with :? OperationCanceledException as e ->
printfn $"{e.GetType().Name}: The wait has been canceled. Task status: {t.Status:G}"
Thread.Sleep 4000
printfn $"After sleeping, the task status: {t.Status:G}"
ts.Dispose()
// The example displays output like the following if the wait is canceled by
// the cancellation token:
// About to wait completion of task 1
// Canceling the cancellation token from thread 3...
// OperationCanceledException: The wait has been canceled. Task status: Running
// Task ended delay...
// After sleeping, the task status: RanToCompletion
// The example displays output like the following if the wait is canceled by
// the timeout interval expiring:
// About to wait completion of task 1
// Wait completed normally: False
// The task status: Running
// Canceling the cancellation token from thread 3...
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim ts As New CancellationTokenSource()
Dim thread As New Thread(AddressOf CancelToken)
thread.Start(ts)
Dim t As Task = Task.Run( Sub()
Task.Delay(5000).Wait()
Console.WriteLine("Task ended delay...")
End Sub)
Try
Console.WriteLine("About to wait completion of task {0}", t.Id)
Dim result As Boolean = t.Wait(1510, ts.Token)
Console.WriteLine("Wait completed normally: {0}", result)
Console.WriteLine("The task status: {0:G}", t.Status)
Catch e As OperationCanceledException
Console.WriteLine("{0}: The wait has been canceled. Task status: {1:G}",
e.GetType().Name, t.Status)
Thread.Sleep(4000)
Console.WriteLine("After sleeping, the task status: {0:G}", t.Status)
ts.Dispose()
End Try
End Sub
Private Sub CancelToken(obj As Object)
Thread.Sleep(1500)
Console.WriteLine("Canceling the cancellation token from thread {0}...",
Thread.CurrentThread.ManagedThreadId)
If TypeOf obj Is CancellationTokenSource Then
Dim source As CancellationTokenSource = CType(obj, CancellationTokenSource)
source.Cancel()
End If
End Sub
End Module
' The example displays output like the following if the wait is canceled by
' the cancellation token:
' About to wait completion of task 1
' Canceling the cancellation token from thread 3...
' OperationCanceledException: The wait has been canceled. Task status: Running
' Task ended delay...
' After sleeping, the task status: RanToCompletion
' The example displays output like the following if the wait is canceled by
' the timeout interval expiring:
' About to wait completion of task 1
' Wait completed normally: False
' The task status: Running
' Canceling the cancellation token from thread 3...
Należy pamiętać, że dokładne dane wyjściowe z przykładu zależą od tego, czy oczekiwanie zostało anulowane z powodu tokenu anulowania, czy też z powodu upływu interwału limitu czasu.
Uwagi
Wait(Int32, CancellationToken) to metoda synchronizacji, która powoduje, że wątek wywołujący oczekuje na ukończenie bieżącego wystąpienia zadania do momentu wystąpienia jednego z następujących:
Zadanie zostało ukończone pomyślnie.
Samo zadanie jest anulowane lub zgłasza wyjątek. W takim przypadku obsłużysz AggregateException wyjątek. Właściwość AggregateException.InnerExceptions zawiera szczegółowe informacje o wyjątku lub wyjątkach.
cancellationToken
Token anulowania jest anulowany. W takim przypadku wywołanie Wait(Int32, CancellationToken) metody zgłasza błąd OperationCanceledException.Interwał zdefiniowany przez
millisecondsTimeout
upłynął. W takim przypadku bieżący wątek wznawia wykonywanie, a metoda zwracafalse
wartość .
Uwaga
Anulowanie tokenu cancellationToken
anulowania nie ma wpływu na uruchomione zadanie, chyba że został również przekazany token anulowania i jest przygotowany do obsługi anulowania. Przekazanie cancellationToken
obiektu do tej metody umożliwia po prostu anulowanie oczekiwania na podstawie pewnego warunku.
Dotyczy
Wait(TimeSpan)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task ukończenie wykonywania w określonym przedziale czasu.
public:
bool Wait(TimeSpan timeout);
public bool Wait (TimeSpan timeout);
member this.Wait : TimeSpan -> bool
Public Function Wait (timeout As TimeSpan) As Boolean
Parametry
- timeout
- TimeSpan
Element TimeSpan reprezentujący liczbę milisekund oczekiwania lub wartość reprezentującą TimeSpan -1 milisekundy oczekiwania na czas nieokreślony.
Zwraca
true
jeśli ukończone Task wykonanie w czasie przydzielonym; w przeciwnym razie . false
Wyjątki
Został Task usunięty.
timeout
jest liczbą ujemną inną niż -1 milisekund, która reprezentuje nieskończony limit czasu.
-lub-
timeout
wartość jest większa niż Int32.MaxValue.
Zadanie zostało anulowane. Kolekcja InnerExceptions zawiera TaskCanceledException obiekt.
-lub-
Podczas wykonywania zadania został zgłoszony wyjątek. Kolekcja InnerExceptions zawiera informacje o wyjątku lub wyjątkach.
Przykłady
Poniższy przykład uruchamia zadanie, które generuje pięć milionów liczb całkowitych losowych z zakresu od 0 do 100 i oblicza ich średnią. W przykładzie Wait(TimeSpan) użyto metody oczekiwania na ukończenie aplikacji w ciągu 150 milisekund. Jeśli aplikacja zakończy się normalnie, zadanie wyświetla sumę i średnią wygenerowanych liczb losowych. Jeśli upłynął interwał przekroczenia limitu czasu, w przykładzie zostanie wyświetlony komunikat przed jego zakończeniem.
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task t = Task.Run( () => {
Random rnd = new Random();
long sum = 0;
int n = 5000000;
for (int ctr = 1; ctr <= n; ctr++) {
int number = rnd.Next(0, 101);
sum += number;
}
Console.WriteLine("Total: {0:N0}", sum);
Console.WriteLine("Mean: {0:N2}", sum/n);
Console.WriteLine("N: {0:N0}", n);
} );
TimeSpan ts = TimeSpan.FromMilliseconds(150);
if (! t.Wait(ts))
Console.WriteLine("The timeout interval elapsed.");
}
}
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
// Or it displays the following output:
// The timeout interval elapsed.
open System
open System.Threading.Tasks
let t =
Task.Run(fun () ->
let rnd = Random()
let mutable sum = 0L
let n = 5000000
for _ = 1 to n do
let number = rnd.Next(0, 101)
sum <- sum + int64 number
printfn $"Total: {sum:N0}"
printfn $"Mean: {float sum / float n:N2}"
printfn $"N: {n:N0}")
let ts = TimeSpan.FromMilliseconds 150
if t.Wait ts |> not then
printfn "The timeout interval elapsed."
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
// Or it displays the following output:
// The timeout interval elapsed.
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim t As Task = Task.Run( Sub()
Dim rnd As New Random()
Dim sum As Long
Dim n As Integer = 5000000
For ctr As Integer = 1 To n
Dim number As Integer = rnd.Next(0, 101)
sum += number
Next
Console.WriteLine("Total: {0:N0}", sum)
Console.WriteLine("Mean: {0:N2}", sum/n)
Console.WriteLine("N: {0:N0}", n)
End Sub)
Dim ts As TimeSpan = TimeSpan.FromMilliseconds(150)
If Not t.Wait(ts) Then
Console.WriteLine("The timeout interval elapsed.")
End If
End Sub
End Module
' The example displays output similar to the following:
' Total: 50,015,714
' Mean: 50.02
' N: 1,000,000
' Or it displays the following output:
' The timeout interval elapsed.
Uwagi
Wait(TimeSpan) to metoda synchronizacji, która powoduje, że wątek wywołujący oczekuje na ukończenie bieżącego wystąpienia zadania do momentu wystąpienia jednego z następujących:
Zadanie zostało ukończone pomyślnie.
Samo zadanie jest anulowane lub zgłasza wyjątek. W takim przypadku obsłużysz AggregateException wyjątek. Właściwość AggregateException.InnerExceptions zawiera szczegółowe informacje o wyjątku lub wyjątkach.
Interwał zdefiniowany przez
timeout
upłynął. W takim przypadku bieżący wątek wznawia wykonywanie, a metoda zwracafalse
wartość .
Dotyczy
Wait(CancellationToken)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task zakończenie wykonywania. Oczekiwanie kończy się, jeśli token anulowania zostanie anulowany przed ukończeniem zadania.
public:
void Wait(System::Threading::CancellationToken cancellationToken);
public void Wait (System.Threading.CancellationToken cancellationToken);
member this.Wait : System.Threading.CancellationToken -> unit
Public Sub Wait (cancellationToken As CancellationToken)
Parametry
- cancellationToken
- CancellationToken
Token anulowania obserwowany podczas oczekiwania na ukończenie zadania.
Wyjątki
Element cancellationToken
został anulowany.
Zadanie zostało usunięte.
Zadanie zostało anulowane. Kolekcja InnerExceptions zawiera TaskCanceledException obiekt.
-lub-
Podczas wykonywania zadania został zgłoszony wyjątek. Kolekcja InnerExceptions zawiera informacje o wyjątku lub wyjątkach.
Przykłady
Poniższy przykład ilustruje proste użycie tokenu anulowania w celu anulowania oczekiwania na ukończenie zadania. Zadanie jest uruchamiane, wywołuje metodę CancellationTokenSource.Cancel , aby anulować dowolne tokeny anulowania źródła tokenu, a następnie opóźnia się przez pięć sekund. Należy pamiętać, że samo zadanie nie zostało przekazane tokenu anulowania i nie można anulować. Wątek aplikacji wywołuje metodę zadania, aby poczekać na ukończenie zadania Task.Wait , ale oczekiwanie zostanie anulowane po anulowaniu tokenu anulowania i OperationCanceledException zostanie zgłoszony. Procedura obsługi wyjątków zgłasza wyjątek, a następnie śpi przez sześć sekund. Jak pokazuje dane wyjściowe z przykładu, opóźnienie to umożliwia ukończenie zadania w RanToCompletion stanie.
using System;
using System.Threading;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
CancellationTokenSource ts = new CancellationTokenSource();
Task t = Task.Run( () => { Console.WriteLine("Calling Cancel...");
ts.Cancel();
Task.Delay(5000).Wait();
Console.WriteLine("Task ended delay...");
});
try {
Console.WriteLine("About to wait for the task to complete...");
t.Wait(ts.Token);
}
catch (OperationCanceledException e) {
Console.WriteLine("{0}: The wait has been canceled. Task status: {1:G}",
e.GetType().Name, t.Status);
Thread.Sleep(6000);
Console.WriteLine("After sleeping, the task status: {0:G}", t.Status);
}
ts.Dispose();
}
}
// The example displays output like the following:
// About to wait for the task to complete...
// Calling Cancel...
// OperationCanceledException: The wait has been canceled. Task status: Running
// Task ended delay...
// After sleeping, the task status: RanToCompletion
open System
open System.Threading
open System.Threading.Tasks
let ts = new CancellationTokenSource()
let t =
Task.Run(fun () ->
printfn "Calling Cancel..."
ts.Cancel()
Task.Delay(5000).Wait()
printfn $"Task ended delay...")
try
printfn "About to wait for the task to complete..."
t.Wait ts.Token
with :? OperationCanceledException as e ->
printfn $"{e.GetType().Name}: The wait has been canceled. Task status: {t.Status:G}"
Thread.Sleep 6000
printfn $"After sleeping, the task status: {t.Status:G}"
ts.Dispose()
// The example displays output like the following:
// About to wait for the task to complete...
// Calling Cancel...
// OperationCanceledException: The wait has been canceled. Task status: Running
// Task ended delay...
// After sleeping, the task status: RanToCompletion
Imports System.Threading
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim ts As New CancellationTokenSource()
Dim t = Task.Run( Sub()
Console.WriteLine("Calling Cancel...")
ts.Cancel()
Task.Delay(5000).Wait()
Console.WriteLine("Task ended delay...")
End Sub)
Try
Console.WriteLine("About to wait for the task to complete...")
t.Wait(ts.Token)
Catch e As OperationCanceledException
Console.WriteLine("{0}: The wait has been canceled. Task status: {1:G}",
e.GetType().Name, t.Status)
Thread.Sleep(6000)
Console.WriteLine("After sleeping, the task status: {0:G}", t.Status)
End Try
ts.Dispose()
End Sub
End Module
' The example displays output like the following:
' About to wait for the task to complete...
' Calling Cancel...
' OperationCanceledException: The wait has been canceled. Task status: Running
' Task ended delay...
' After sleeping, the task status: RanToCompletion
Uwagi
Metoda Wait(CancellationToken) tworzy możliwość anulowania oczekiwania. Oznacza to, że bieżący wątek będzie czekać, aż wystąpi jeden z następujących elementów:
Zadanie zostanie ukończone.
Token anulowania zostanie anulowany. W tym przypadku wywołanie Wait(CancellationToken) metody zgłasza błąd OperationCanceledException.
Uwaga
Anulowanie tokenu cancellationToken
anulowania nie ma wpływu na uruchomione zadanie, chyba że został również przekazany token anulowania i jest przygotowany do obsługi anulowania. Przekazanie cancellationToken
obiektu do tej metody umożliwia po prostu anulowanie oczekiwania.
Dotyczy
Wait()
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task zakończenie wykonywania.
public:
void Wait();
public void Wait ();
member this.Wait : unit -> unit
Public Sub Wait ()
Wyjątki
Element Task został usunięty.
Zadanie zostało anulowane. Kolekcja InnerExceptions zawiera TaskCanceledException obiekt .
-lub-
Podczas wykonywania zadania został zgłoszony wyjątek. Kolekcja InnerExceptions zawiera informacje o wyjątkach lub wyjątkach.
Przykłady
Poniższy przykład uruchamia zadanie, które generuje milion losowych liczb całkowitych z zakresu od 0 do 100 i oblicza ich średnią. W przykładzie użyto Wait metody , aby upewnić się, że zadanie zostanie ukończone przed zakończeniem działania aplikacji. W przeciwnym razie, ponieważ jest to aplikacja konsolowa, przykład zakończy się, zanim zadanie będzie mogło obliczyć i wyświetlić średnią.
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task t = Task.Run( () => {
Random rnd = new Random();
long sum = 0;
int n = 1000000;
for (int ctr = 1; ctr <= n; ctr++) {
int number = rnd.Next(0, 101);
sum += number;
}
Console.WriteLine("Total: {0:N0}", sum);
Console.WriteLine("Mean: {0:N2}", sum/n);
Console.WriteLine("N: {0:N0}", n);
} );
t.Wait();
}
}
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
open System
open System.Threading.Tasks
let t =
Task.Run(fun () ->
let rnd = Random()
let mutable sum = 0L
let n = 1000000
for _ = 1 to n do
let number = rnd.Next(0, 101)
sum <- sum + int64 number
printfn $"Total: {sum:N0}"
printfn $"Mean: {float sum / float n:N2}"
printfn $"N: {n:N0}")
t.Wait()
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim t As Task = Task.Run( Sub()
Dim rnd As New Random()
Dim sum As Long
Dim n As Integer = 1000000
For ctr As Integer = 1 To n
Dim number As Integer = rnd.Next(0, 101)
sum += number
Next
Console.WriteLine("Total: {0:N0}", sum)
Console.WriteLine("Mean: {0:N2}", sum/n)
Console.WriteLine("N: {0:N0}", n)
End Sub)
t.Wait()
End Sub
End Module
' The example displays output similar to the following:
' Total: 50,015,714
' Mean: 50.02
' N: 1,000,000
Uwagi
Wait to metoda synchronizacji, która powoduje, że wątek wywołujący czeka do ukończenia bieżącego zadania. Jeśli bieżące zadanie nie zostało uruchomione, metoda Wait próbuje usunąć zadanie z harmonogramu i wykonać je w tekście w bieżącym wątku. Jeśli nie można tego zrobić lub jeśli bieżące zadanie zostało już uruchomione, blokuje wątek wywołujący do momentu zakończenia zadania. Aby uzyskać więcej informacji, zobacz Task.Wait i "Inlining" w blogu Parallel Programming with .NET (Programowanie równoległe przy użyciu platformy .NET).
Zobacz też
Dotyczy
Wait(Int32)
- Źródło:
- Task.cs
- Źródło:
- Task.cs
- Źródło:
- Task.cs
Czeka na Task ukończenie wykonywania w ciągu określonej liczby milisekund.
public:
bool Wait(int millisecondsTimeout);
public bool Wait (int millisecondsTimeout);
member this.Wait : int -> bool
Public Function Wait (millisecondsTimeout As Integer) As Boolean
Parametry
- millisecondsTimeout
- Int32
Liczba milisekund oczekiwania lub Infinite (-1) oczekiwania na czas nieokreślony.
Zwraca
true
jeśli ukończone Task wykonanie w wyznaczonym czasie; w przeciwnym razie . false
Wyjątki
Element Task został usunięty.
millisecondsTimeout
jest liczbą ujemną inną niż -1, która reprezentuje nieskończony limit czasu.
Zadanie zostało anulowane. Kolekcja InnerExceptions zawiera TaskCanceledException obiekt .
-lub-
Podczas wykonywania zadania został zgłoszony wyjątek. Kolekcja InnerExceptions zawiera informacje o wyjątkach lub wyjątkach.
Przykłady
Poniższy przykład uruchamia zadanie, które generuje pięć milionów losowych liczb całkowitych z zakresu od 0 do 100 i oblicza ich średnią. W przykładzie użyto Wait(Int32) metody oczekiwania na ukończenie aplikacji w ciągu 150 milisekund. Jeśli aplikacja zakończy się normalnie, zadanie wyświetla sumę i średnią wygenerowanych liczb losowych. Jeśli upłynął interwał limitu czasu, w przykładzie zostanie wyświetlony komunikat przed jego zakończeniem.
using System;
using System.Threading.Tasks;
public class Example
{
public static void Main()
{
Task t = Task.Run( () => {
Random rnd = new Random();
long sum = 0;
int n = 5000000;
for (int ctr = 1; ctr <= n; ctr++) {
int number = rnd.Next(0, 101);
sum += number;
}
Console.WriteLine("Total: {0:N0}", sum);
Console.WriteLine("Mean: {0:N2}", sum/n);
Console.WriteLine("N: {0:N0}", n);
} );
if (! t.Wait(150))
Console.WriteLine("The timeout interval elapsed.");
}
}
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
// Or it displays the following output:
// The timeout interval elapsed.
open System
open System.Threading.Tasks
let t =
Task.Run(fun () ->
let rnd = Random()
let mutable sum = 0L
let n = 5000000
for _ = 1 to n do
let number = rnd.Next(0, 101)
sum <- sum + int64 number
printfn $"Total: {sum:N0}"
printfn $"Mean: {float sum / float n:N2}"
printfn $"N: {n:N0}")
if t.Wait 150 |> not then
printfn "The timeout interval elapsed."
// The example displays output similar to the following:
// Total: 50,015,714
// Mean: 50.02
// N: 1,000,000
// Or it displays the following output:
// The timeout interval elapsed.
Imports System.Threading.Tasks
Module Example
Public Sub Main()
Dim t As Task = Task.Run( Sub()
Dim rnd As New Random()
Dim sum As Long
Dim n As Integer = 5000000
For ctr As Integer = 1 To n
Dim number As Integer = rnd.Next(0, 101)
sum += number
Next
Console.WriteLine("Total: {0:N0}", sum)
Console.WriteLine("Mean: {0:N2}", sum/n)
Console.WriteLine("N: {0:N0}", n)
End Sub)
If Not t.Wait(150) Then
Console.WriteLine("The timeout interval elapsed.")
End If
End Sub
End Module
' The example displays output similar to the following:
' Total: 50,015,714
' Mean: 50.02
' N: 1,000,000
' Or it displays the following output:
' The timeout interval elapsed.
Uwagi
Wait(Int32) to metoda synchronizacji, która powoduje, że wątek wywołujący czeka na ukończenie bieżącego wystąpienia zadania do momentu wystąpienia jednego z następujących elementów:
Zadanie zostanie ukończone pomyślnie.
Samo zadanie jest anulowane lub zgłasza wyjątek. W takim przypadku obsłużysz AggregateException wyjątek. Właściwość AggregateException.InnerExceptions zawiera szczegółowe informacje o wyjątku lub wyjątkach.
Interwał zdefiniowany przez
millisecondsTimeout
upływ czasu. W takim przypadku bieżący wątek wznawia wykonywanie, a metoda zwraca wartośćfalse
.