Task.Wait Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Wartet, bis die Task Ausführung abgeschlossen ist.
Überlädt
| Name | Beschreibung |
|---|---|
| Wait(TimeSpan, CancellationToken) |
Wartet, bis die Task Ausführung abgeschlossen ist. |
| Wait(Int32, CancellationToken) |
Wartet, bis die Task Ausführung abgeschlossen ist. Die Wartezeit wird beendet, wenn ein Timeoutintervall verstrichen ist oder ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen wird. |
| Wait(TimeSpan) |
Wartet auf den Abschluss der Task Ausführung innerhalb eines angegebenen Zeitintervalls. |
| Wait(CancellationToken) |
Wartet, bis die Task Ausführung abgeschlossen ist. Die Wartezeit wird beendet, wenn ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen ist. |
| Wait() |
Wartet, bis die Task Ausführung abgeschlossen ist. |
| Wait(Int32) |
Wartet auf den Abschluss der Task Ausführung innerhalb einer angegebenen Anzahl von Millisekunden. |
Wait(TimeSpan, CancellationToken)
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet, bis die Task Ausführung abgeschlossen ist.
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
Parameter
- timeout
- TimeSpan
Die Wartezeit oder InfiniteTimeSpan das Warten auf unbestimmte Zeit
- cancellationToken
- CancellationToken
A CancellationToken , um zu beobachten, während sie auf den Abschluss der Aufgabe warten.
Gibt zurück
truewenn die Task abgeschlossene Ausführung innerhalb der zugewiesenen Zeit abgeschlossen ist; andernfalls . false
Ausnahmen
timeout ist eine andere negative Zahl als -1 Millisekunden, die ein unendliches Timeout darstellt.
- oder -
Timeout ist größer als MaxValue.
Das cancellationToken wurde abgebrochen.
Gilt für:
Wait(Int32, CancellationToken)
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet, bis die Task Ausführung abgeschlossen ist. Die Wartezeit wird beendet, wenn ein Timeoutintervall verstrichen ist oder ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen wird.
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
Parameter
- millisecondsTimeout
- Int32
Die Anzahl der zu wartenden Millisekunden oder Infinite (-1) auf unbestimmte Zeit.
- cancellationToken
- CancellationToken
Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe beobachtet werden soll.
Gibt zurück
truewenn die Task abgeschlossene Ausführung innerhalb der zugewiesenen Zeit abgeschlossen ist; andernfalls . false
Ausnahmen
Das cancellationToken wurde abgebrochen.
Dies Task wurde gelöscht.
millisecondsTimeout ist eine andere negative Zahl als -1, die ein unendliches Timeout darstellt.
Die Aufgabe wurde abgebrochen. Die InnerExceptions Auflistung enthält ein TaskCanceledException Objekt.
- oder -
Während der Ausführung der Aufgabe wurde eine Ausnahme ausgelöst. Die InnerExceptions Auflistung enthält Informationen über die Ausnahme oder Ausnahmen.
Beispiele
Im folgenden Beispiel wird die Wait(Int32, CancellationToken) Methode aufgerufen, um sowohl einen Timeoutwert als auch ein Abbruchtoken bereitzustellen, das die Wartezeit auf den Abschluss einer Aufgabe beenden kann. Ein neuer Thread wird gestartet und führt die CancelToken Methode aus, die angehalten und dann die CancellationTokenSource.Cancel Methode aufruft, um die Abbruchtoken abzubrechen. Eine Aufgabe wird dann für 5 Sekunden gestartet und verzögert. Die Wait Methode wird dann aufgerufen, um auf den Abschluss der Aufgabe zu warten und sowohl einen kurzen Timeoutwert als auch ein Abbruchtoken zur Verfügung zu stellen.
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...
Beachten Sie, dass die genaue Ausgabe aus dem Beispiel davon abhängt, ob die Wartezeit aufgrund des Abbruchtokens abgebrochen wurde oder ob das Timeoutintervall verstrichen ist.
Hinweise
Wait(Int32, CancellationToken) ist eine Synchronisierungsmethode, die bewirkt, dass der aufrufende Thread auf den Abschluss der aktuellen Aufgabeninstanz wartet, bis eine der folgenden Aktionen auftritt:
Die Aufgabe wird erfolgreich abgeschlossen.
Die Aufgabe selbst wird abgebrochen oder löst eine Ausnahme aus. In diesem Fall behandeln Sie eine AggregateException Ausnahme. Die AggregateException.InnerExceptions Eigenschaft enthält Details zu der Ausnahme oder Ausnahmen.
Das
cancellationTokenAbbruchtoken wird abgebrochen. In diesem Fall löst der Aufruf der Wait(Int32, CancellationToken) Methode eine OperationCanceledException.Das durch
millisecondsTimeoutVerstriche definierte Intervall. In diesem Fall setzt der aktuelle Thread die Ausführung fort, und die Methode gibt zurückfalse.
Hinweis
Das Abbrechen des cancellationToken Abbruchtokens hat keine Auswirkungen auf die ausgeführte Aufgabe, es sei denn, es wurde auch das Abbruchtoken übergeben und ist bereit, den Abbruch zu verarbeiten. Wenn Sie das cancellationToken Objekt an diese Methode übergeben, kann die Wartezeit auf der Grundlage einer bestimmten Bedingung abgebrochen werden.
Gilt für:
Wait(TimeSpan)
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet auf den Abschluss der Task Ausführung innerhalb eines angegebenen Zeitintervalls.
public:
bool Wait(TimeSpan timeout);
public bool Wait(TimeSpan timeout);
member this.Wait : TimeSpan -> bool
Public Function Wait (timeout As TimeSpan) As Boolean
Parameter
- timeout
- TimeSpan
Ein TimeSpan Wert, der die Anzahl der zu wartenden Millisekunden darstellt, oder eine TimeSpan , die -1 Millisekunden darstellt, die unbegrenzt gewartet werden sollen.
Gibt zurück
truewenn die Task abgeschlossene Ausführung innerhalb der zugewiesenen Zeit abgeschlossen ist; andernfalls . false
Ausnahmen
Dies Task wurde gelöscht.
timeout ist eine andere negative Zahl als -1 Millisekunden, die ein unendliches Timeout darstellt.
- oder -
timeout ist größer als Int32.MaxValue.
Die Aufgabe wurde abgebrochen. Die InnerExceptions Auflistung enthält ein TaskCanceledException Objekt.
- oder -
Während der Ausführung der Aufgabe wurde eine Ausnahme ausgelöst. Die InnerExceptions Auflistung enthält Informationen über die Ausnahme oder Ausnahmen.
Beispiele
Im folgenden Beispiel wird eine Aufgabe gestartet, die fünf Millionen zufällige ganze Zahlen zwischen 0 und 100 generiert und deren Mittelwert berechnet. Im Beispiel wird die Wait(TimeSpan) Methode verwendet, um auf den Abschluss der Anwendung innerhalb von 150 Millisekunden zu warten. Wenn die Anwendung normal abgeschlossen wird, zeigt der Vorgang die Summe und den Mittelwert der zufallsgenerierten Zufallszahlen an. Wenn das Timeoutintervall abgelaufen ist, zeigt das Beispiel eine Meldung an, bevor es beendet wird.
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.
Hinweise
Wait(TimeSpan) ist eine Synchronisierungsmethode, die bewirkt, dass der aufrufende Thread auf den Abschluss der aktuellen Aufgabeninstanz wartet, bis eine der folgenden Aktionen auftritt:
Die Aufgabe wird erfolgreich abgeschlossen.
Die Aufgabe selbst wird abgebrochen oder löst eine Ausnahme aus. In diesem Fall behandeln Sie eine AggregateException Ausnahme. Die AggregateException.InnerExceptions Eigenschaft enthält Details zu der Ausnahme oder Ausnahmen.
Das durch
timeoutVerstriche definierte Intervall. In diesem Fall setzt der aktuelle Thread die Ausführung fort, und die Methode gibt zurückfalse.
Gilt für:
Wait(CancellationToken)
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet, bis die Task Ausführung abgeschlossen ist. Die Wartezeit wird beendet, wenn ein Abbruchtoken abgebrochen wird, bevor die Aufgabe abgeschlossen ist.
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)
Parameter
- cancellationToken
- CancellationToken
Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe beobachtet werden soll.
Ausnahmen
Das cancellationToken wurde abgebrochen.
Der Vorgang wurde gelöscht.
Die Aufgabe wurde abgebrochen. Die InnerExceptions Auflistung enthält ein TaskCanceledException Objekt.
- oder -
Während der Ausführung der Aufgabe wurde eine Ausnahme ausgelöst. Die InnerExceptions Auflistung enthält Informationen über die Ausnahme oder Ausnahmen.
Beispiele
Das folgende Beispiel veranschaulicht die einfache Verwendung eines Abbruchtokens zum Abbrechen des Wartens auf den Abschluss einer Aufgabe. Eine Aufgabe wird gestartet, ruft die CancellationTokenSource.Cancel Methode auf, um alle Abbruchtoken der Tokenquelle abzubrechen, und verzögert sich dann fünf Sekunden. Beachten Sie, dass die Aufgabe selbst nicht an das Abbruchtoken übergeben wurde und nicht abgebrochen werden kann. Der Anwendungsthread ruft die Methode der Aufgabe Task.Wait auf, auf den Abschluss der Aufgabe zu warten, aber die Wartezeit wird abgebrochen, sobald das Abbruchtoken abgebrochen wurde und ein OperationCanceledException Vorgang ausgelöst wird. Der Ausnahmehandler meldet die Ausnahme und wird dann sechs Sekunden lang in den Ruhezustand geschlafen. Wie die Ausgabe aus dem Beispiel zeigt, kann die Aufgabe mit dieser Verzögerung im RanToCompletion Zustand abgeschlossen werden.
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
Hinweise
Die Wait(CancellationToken) Methode erstellt eine abbruchbare Wartezeit. Das heißt, der aktuelle Thread wird warten, bis eine der folgenden Aktionen auftritt:
Die Aufgabe wird abgeschlossen.
Das Abbruchtoken wird abgebrochen. In diesem Fall löst der Aufruf der Wait(CancellationToken) Methode eine OperationCanceledException.
Hinweis
Das Abbrechen des cancellationToken Abbruchtokens hat keine Auswirkungen auf die ausgeführte Aufgabe, es sei denn, es wurde auch das Abbruchtoken übergeben und ist bereit, den Abbruch zu verarbeiten. Durch Das Übergeben des cancellationToken Objekts an diese Methode kann die Wartezeit einfach abgebrochen werden.
Gilt für:
Wait()
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet, bis die Task Ausführung abgeschlossen ist.
public:
void Wait();
public void Wait();
member this.Wait : unit -> unit
Public Sub Wait ()
Ausnahmen
Dies Task wurde gelöscht.
Die Aufgabe wurde abgebrochen. Die InnerExceptions Auflistung enthält ein TaskCanceledException Objekt.
- oder -
Während der Ausführung der Aufgabe wurde eine Ausnahme ausgelöst. Die InnerExceptions Auflistung enthält Informationen über die Ausnahme oder Ausnahmen.
Beispiele
Im folgenden Beispiel wird eine Aufgabe gestartet, die eine Million zufällige ganze Zahlen zwischen 0 und 100 generiert und deren Mittelwert berechnet.The following example starts a task that generates one million random integers between 0 and 100 and computes their mean. Im Beispiel wird die Wait Methode verwendet, um sicherzustellen, dass die Aufgabe abgeschlossen wird, bevor die Anwendung beendet wird. Andernfalls würde das Beispiel, da es sich um eine Konsolenanwendung handelt, beendet, bevor die Aufgabe den Mittelwert berechnen und anzeigen kann.
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
Hinweise
Wait ist eine Synchronisierungsmethode, die bewirkt, dass der aufrufende Thread wartet, bis die aktuelle Aufgabe abgeschlossen ist. Wenn die ausführung des aktuellen Vorgangs nicht gestartet wurde, versucht die Wait-Methode, den Vorgang aus dem Scheduler zu entfernen und inline im aktuellen Thread auszuführen. Wenn dies nicht möglich ist oder die ausführung der aktuellen Aufgabe bereits gestartet wurde, wird der aufrufende Thread blockiert, bis die Aufgabe abgeschlossen ist. Weitere Informationen finden Sie unter Task.Wait und "Inlining" im Parallel Programming with .NET-Blog.
Weitere Informationen
Gilt für:
Wait(Int32)
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
- Quelle:
- Task.cs
Wartet auf den Abschluss der Task Ausführung innerhalb einer angegebenen Anzahl von Millisekunden.
public:
bool Wait(int millisecondsTimeout);
public bool Wait(int millisecondsTimeout);
member this.Wait : int -> bool
Public Function Wait (millisecondsTimeout As Integer) As Boolean
Parameter
- millisecondsTimeout
- Int32
Die Anzahl der zu wartenden Millisekunden oder Infinite (-1) auf unbestimmte Zeit.
Gibt zurück
truewenn die Task abgeschlossene Ausführung innerhalb der zugewiesenen Zeit abgeschlossen ist; andernfalls . false
Ausnahmen
Dies Task wurde gelöscht.
millisecondsTimeout ist eine andere negative Zahl als -1, die ein unendliches Timeout darstellt.
Die Aufgabe wurde abgebrochen. Die InnerExceptions Auflistung enthält ein TaskCanceledException Objekt.
- oder -
Während der Ausführung der Aufgabe wurde eine Ausnahme ausgelöst. Die InnerExceptions Auflistung enthält Informationen über die Ausnahme oder Ausnahmen.
Beispiele
Im folgenden Beispiel wird eine Aufgabe gestartet, die fünf Millionen zufällige ganze Zahlen zwischen 0 und 100 generiert und deren Mittelwert berechnet. Im Beispiel wird die Wait(Int32) Methode verwendet, um auf den Abschluss der Anwendung innerhalb von 150 Millisekunden zu warten. Wenn die Anwendung normal abgeschlossen wird, zeigt der Vorgang die Summe und den Mittelwert der zufallsgenerierten Zufallszahlen an. Wenn das Timeoutintervall abgelaufen ist, zeigt das Beispiel eine Meldung an, bevor es beendet wird.
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.
Hinweise
Wait(Int32) ist eine Synchronisierungsmethode, die bewirkt, dass der aufrufende Thread auf den Abschluss der aktuellen Aufgabeninstanz wartet, bis eine der folgenden Aktionen auftritt:
Die Aufgabe wird erfolgreich abgeschlossen.
Die Aufgabe selbst wird abgebrochen oder löst eine Ausnahme aus. In diesem Fall behandeln Sie eine AggregateException Ausnahme. Die AggregateException.InnerExceptions Eigenschaft enthält Details zu der Ausnahme oder Ausnahmen.
Das durch
millisecondsTimeoutVerstriche definierte Intervall. In diesem Fall setzt der aktuelle Thread die Ausführung fort, und die Methode gibt zurückfalse.