Task.Wait Metoda

Definicja

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution.

Przeciążenia

Wait(Int32, CancellationToken)

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution. Oczekiwanie kończy się, jeśli upłynie interwał limitu czasu lub token anulowania został anulowany przed ukończeniem zadania.The wait terminates if a timeout interval elapses or a cancellation token is canceled before the task completes.

Wait(TimeSpan)

Czeka na Task zakończenie wykonywania w określonym przedziale czasu.Waits for the Task to complete execution within a specified time interval.

Wait(Int32)

Czeka na Task zakończenie wykonywania w ciągu określonej liczby milisekund.Waits for the Task to complete execution within a specified number of milliseconds.

Wait(CancellationToken)

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution. Oczekiwanie kończy się, jeśli token anulowania zostanie anulowany przed ukończeniem zadania.The wait terminates if a cancellation token is canceled before the task completes.

Wait()

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution.

Wait(Int32, CancellationToken)

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution. Oczekiwanie kończy się, jeśli upłynie interwał limitu czasu lub token anulowania został anulowany przed ukończeniem zadania.The wait terminates if a timeout interval elapses or a cancellation token is canceled before the task completes.

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

millisecondsTimeout
Int32

Liczba milisekund oczekiwania lub Infinite (-1) oczekiwania na czas nieokreślony.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

cancellationToken
CancellationToken

Token anulowania do obserwowania podczas oczekiwania na ukończenie zadania.A cancellation token to observe while waiting for the task to complete.

Zwraca

Boolean

true Jeśli Task zakończone wykonanie w wyznaczonym czasie; w przeciwnym razie, false .true if the Task completed execution within the allotted time; otherwise, false.

Wyjątki

cancellationTokenAnulowano.The cancellationToken was canceled.

Został Task usunięty.The Task has been disposed.

millisecondsTimeout jest liczbą ujemną inną niż-1, co oznacza nieskończony limit czasu.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Zadanie zostało anulowane.The task was canceled. InnerExceptionsKolekcja zawiera TaskCanceledException obiekt.The InnerExceptions collection contains a TaskCanceledException object.

-lub--or- Zgłoszono wyjątek podczas wykonywania zadania.An exception was thrown during the execution of the task. InnerExceptionsKolekcja zawiera informacje o wyjątku lub wyjątkach.The InnerExceptions collection contains information about the exception or exceptions.

Przykłady

Poniższy przykład wywołuje Wait(Int32, CancellationToken) metodę w celu zapewnienia zarówno wartości limitu czasu, jak i tokenu anulowania, który może zakończyć oczekiwanie na ukończenie zadania.The following example calls the Wait(Int32, CancellationToken) method to provide both a timeout value and a cancellation token that can end the wait for a task's completion. Nowy wątek jest uruchamiany i wykonuje CancelToken metodę, która wstrzymuje, a następnie wywołuje metodę, CancellationTokenSource.Cancel Aby anulować tokeny anulowania.A new thread is started and executes the CancelToken method, which pauses and then calls the CancellationTokenSource.Cancel method to cancel the cancellation tokens. Uruchomione zostanie zadanie i opóźnienia przez 5 sekund.A task is then launched and delays for 5 seconds. WaitMetoda jest następnie wywoływana w celu oczekiwania na ukończenie zadania i ma zapewnioną zarówno krótką wartość limitu czasu, jak i token anulowania.The Wait method is then called to wait for the task's completion and is provided both a brief timeout value and a cancellation token.

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...
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 zauważyć, że dokładne dane wyjściowe z przykładu zależą od tego, czy oczekiwanie zostało anulowane z powodu tokenu anulowania lub interwału limitu czasu, który upłynął.Note that the precise output from the example depends on whether the wait was canceled because of the cancellation token or because the timeout interval elapsed.

Uwagi

Wait(Int32, CancellationToken) jest metodą synchronizacji, która powoduje, że wątek wywołujący czeka na zakończenie bieżącego wystąpienia zadania, dopóki nie wystąpi jedno z następujących wystąpień:Wait(Int32, CancellationToken) is a synchronization method that causes the calling thread to wait for the current task instance to complete until one of the following occurs:

  • Zadanie zostało ukończone pomyślnie.The task completes successfully.

  • Samo zadanie jest anulowane lub zgłasza wyjątek.The task itself is canceled or throws an exception. W takim przypadku można obsłużyć AggregateException wyjątek.In this case, you handle an AggregateException exception. AggregateException.InnerExceptionsWłaściwość zawiera szczegółowe informacje o wyjątku lub wyjątkach.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • cancellationTokenToken anulowania został anulowany.The cancellationToken cancellation token is canceled. W takim przypadku wywołanie Wait(Int32, CancellationToken) metody zgłasza OperationCanceledException .In this case, the call to the Wait(Int32, CancellationToken) method throws an OperationCanceledException.

  • Interwał definiowany przez millisecondsTimeout czas.The interval defined by millisecondsTimeout elapses. W takim przypadku bieżący wątek wznawia wykonywanie i zwraca metodę false .In this case, the current thread resumes execution and the method returns false.

Uwaga

Anulowanie cancellationToken tokenu anulowania nie ma wpływu na uruchomione zadanie, chyba że został również przekazano token anulowania i jest przygotowany do obsługi anulowania.Canceling the cancellationToken cancellation token has no effect on the running task unless it has also been passed the cancellation token and is prepared to handle cancellation. Przekazanie cancellationToken obiektu do tej metody po prostu pozwala na anulowanie oczekiwania na podstawie pewnego warunku.Passing the cancellationToken object to this method simply allows the wait to be canceled based on some condition.

Dotyczy

Wait(TimeSpan)

Czeka na Task zakończenie wykonywania w określonym przedziale czasu.Waits for the Task to complete execution within a specified time interval.

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

TimeSpanReprezentuje liczbę milisekund, które należy oczekiwać lub TimeSpan który reprezentuje-1 milisekund, aby czekać na czas nieokreślony.A TimeSpan that represents the number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely.

Zwraca

Boolean

true Jeśli Task zakończone wykonanie w wyznaczonym czasie; w przeciwnym razie, false .true if the Task completed execution within the allotted time; otherwise, false.

Wyjątki

Został Task usunięty.The Task has been disposed.

timeout jest liczbą ujemną inną niż-1 milisekund, która reprezentuje nieskończony limit czasu.timeout is a negative number other than -1 milliseconds, which represents an infinite time-out. -lub--or- timeout jest większa niż MaxValue .timeout is greater than MaxValue.

Zadanie zostało anulowane.The task was canceled. InnerExceptionsKolekcja zawiera TaskCanceledException obiekt.The InnerExceptions collection contains a TaskCanceledException object.

-lub--or- Zgłoszono wyjątek podczas wykonywania zadania.An exception was thrown during the execution of the task. InnerExceptionsKolekcja zawiera informacje o wyjątku lub wyjątkach.The InnerExceptions collection contains information about the exception or exceptions.

Przykłady

Poniższy przykład uruchamia zadanie, które generuje 5 000 000 losowe liczby całkowite z zakresu od 0 do 100 i oblicza ich średnią wartość.The following example starts a task that generates five million random integers between 0 and 100 and computes their mean. W przykładzie zastosowano Wait(TimeSpan) metodę oczekiwania na zakończenie działania aplikacji w ciągu 150 milisekund.The example uses the Wait(TimeSpan) method to wait for the application to complete within 150 milliseconds. Jeśli aplikacja zostanie ukończona normalnie, zadanie wyświetla sumę i średnią liczb losowych, które zostały wygenerowane.If the application completes normally, the task displays the sum and mean of the random numbers that it has generated. Jeśli upłynął limit czasu, w przykładzie zostanie wyświetlony komunikat przed jego zakończeniem.If the timeout interval has elapsed, the example displays a message before it terminates.

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.
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) jest metodą synchronizacji, która powoduje, że wątek wywołujący czeka na zakończenie bieżącego wystąpienia zadania, dopóki nie wystąpi jedno z następujących wystąpień:Wait(TimeSpan) is a synchronization method that causes the calling thread to wait for the current task instance to complete until one of the following occurs:

  • Zadanie zostało ukończone pomyślnie.The task completes successfully.

  • Samo zadanie jest anulowane lub zgłasza wyjątek.The task itself is canceled or throws an exception. W takim przypadku można obsłużyć AggregateException wyjątek.In this case, you handle an AggregateException exception. AggregateException.InnerExceptionsWłaściwość zawiera szczegółowe informacje o wyjątku lub wyjątkach.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • Interwał definiowany przez timeout czas.The interval defined by timeout elapses. W takim przypadku bieżący wątek wznawia wykonywanie i zwraca metodę false .In this case, the current thread resumes execution and the method returns false.

Dotyczy

Wait(Int32)

Czeka na Task zakończenie wykonywania w ciągu określonej liczby milisekund.Waits for the Task to complete execution within a specified number of milliseconds.

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.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

Zwraca

Boolean

true Jeśli Task zakończone wykonanie w wyznaczonym czasie; w przeciwnym razie, false .true if the Task completed execution within the allotted time; otherwise, false.

Wyjątki

Został Task usunięty.The Task has been disposed.

millisecondsTimeout jest liczbą ujemną inną niż-1, co oznacza nieskończony limit czasu.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Zadanie zostało anulowane.The task was canceled. InnerExceptionsKolekcja zawiera TaskCanceledException obiekt.The InnerExceptions collection contains a TaskCanceledException object.

-lub--or- Zgłoszono wyjątek podczas wykonywania zadania.An exception was thrown during the execution of the task. InnerExceptionsKolekcja zawiera informacje o wyjątku lub wyjątkach.The InnerExceptions collection contains information about the exception or exceptions.

Przykłady

Poniższy przykład uruchamia zadanie, które generuje 5 000 000 losowe liczby całkowite z zakresu od 0 do 100 i oblicza ich średnią wartość.The following example starts a task that generates five million random integers between 0 and 100 and computes their mean. W przykładzie zastosowano Wait(Int32) metodę oczekiwania na zakończenie działania aplikacji w ciągu 150 milisekund.The example uses the Wait(Int32) method to wait for the application to complete within 150 milliseconds. Jeśli aplikacja zostanie ukończona normalnie, zadanie wyświetla sumę i średnią liczb losowych, które zostały wygenerowane.If the application completes normally, the task displays the sum and mean of the random numbers that it has generated. Jeśli upłynął limit czasu, w przykładzie zostanie wyświetlony komunikat przed jego zakończeniem.If the timeout interval has elapsed, the example displays a message before it terminates.

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.
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) jest metodą synchronizacji, która powoduje, że wątek wywołujący czeka na zakończenie bieżącego wystąpienia zadania, dopóki nie wystąpi jedno z następujących wystąpień:Wait(Int32) is a synchronization method that causes the calling thread to wait for the current task instance to complete until one of the following occurs:

  • Zadanie zostało ukończone pomyślnie.The task completes successfully.

  • Samo zadanie jest anulowane lub zgłasza wyjątek.The task itself is canceled or throws an exception. W takim przypadku można obsłużyć AggregateException wyjątek.In this case, you handle an AggregateException exception. AggregateException.InnerExceptionsWłaściwość zawiera szczegółowe informacje o wyjątku lub wyjątkach.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • Interwał definiowany przez millisecondsTimeout czas.The interval defined by millisecondsTimeout elapses. W takim przypadku bieżący wątek wznawia wykonywanie i zwraca metodę false .In this case, the current thread resumes execution and the method returns false.

Dotyczy

Wait(CancellationToken)

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution. Oczekiwanie kończy się, jeśli token anulowania zostanie anulowany przed ukończeniem zadania.The wait terminates if a cancellation token is canceled before the task completes.

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 do obserwowania podczas oczekiwania na ukończenie zadania.A cancellation token to observe while waiting for the task to complete.

Wyjątki

cancellationTokenAnulowano.The cancellationToken was canceled.

Zadanie zostało usunięte.The task has been disposed.

Zadanie zostało anulowane.The task was canceled. InnerExceptionsKolekcja zawiera TaskCanceledException obiekt.The InnerExceptions collection contains a TaskCanceledException object.

-lub--or- Zgłoszono wyjątek podczas wykonywania zadania.An exception was thrown during the execution of the task. InnerExceptionsKolekcja zawiera informacje o wyjątku lub wyjątkach.The InnerExceptions collection contains information about the exception or exceptions.

Przykłady

Poniższy przykład ilustruje proste użycie tokenu anulowania, aby anulować oczekiwanie na ukończenie zadania.The following example illustrates the simple use of a cancellation token to cancel waiting for a task's completion. Zadanie jest uruchamiane, wywołuje metodę, CancellationTokenSource.Cancel Aby anulować wszystkie tokeny anulowania źródła tokenu, a następnie opóźniać się przez pięć sekund.A task is launched, calls the CancellationTokenSource.Cancel method to cancel any of the token source's cancellation tokens, and then delays for five seconds. Zwróć uwagę, że samo zadanie nie przekazano tokenu anulowania i nie jest to niemożliwe do anulowania.Note that the task itself has not been passed the cancellation token and is not cancelable. Wątek aplikacji wywołuje Task.Wait metodę zadania, aby poczekać na zakończenie zadania, ale oczekiwanie na anulowanie tokenu anulowania i zgłoszenia zostanie anulowane OperationCanceledException .The application thread calls the task's Task.Wait method to wait for the task to complete, but the wait is canceled once the cancellation token is cancelled and an OperationCanceledException is thrown. Procedura obsługi wyjątków zgłasza wyjątek, a następnie uśpienia przez sześć sekund.The exception handler reports the exception and then sleeps for six seconds. Dane wyjściowe z przykładu pokazują, że opóźnienie umożliwia ukończenie zadania w RanToCompletion stanie.As the output from the example shows, that delay allows the task to complete in the RanToCompletion state.

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
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

Wait(CancellationToken)Metoda tworzy oczekiwanie na anulowanie, czyli powoduje, że bieżący wątek oczekuje na jedną z następujących sytuacji:The Wait(CancellationToken) method creates a cancelable wait; that is, it causes the current thread to wait until one of the following occurs:

Uwaga

Anulowanie cancellationToken tokenu anulowania nie ma wpływu na uruchomione zadanie, chyba że został również przekazano token anulowania i jest przygotowany do obsługi anulowania.Canceling the cancellationToken cancellation token has no effect on the running task unless it has also been passed the cancellation token and is prepared to handle cancellation. Przekazanie cancellationToken obiektu do tej metody po prostu pozwala na anulowanie oczekiwania.Passing the cancellationToken object to this method simply allows the wait to be canceled.

Dotyczy

Wait()

Czeka na Task zakończenie wykonywania.Waits for the Task to complete execution.

public:
 void Wait();
public void Wait ();
member this.Wait : unit -> unit
Public Sub Wait ()

Wyjątki

Został Task usunięty.The Task has been disposed.

Zadanie zostało anulowane.The task was canceled. InnerExceptionsKolekcja zawiera TaskCanceledException obiekt.The InnerExceptions collection contains a TaskCanceledException object.

-lub--or- Zgłoszono wyjątek podczas wykonywania zadania.An exception was thrown during the execution of the task. InnerExceptionsKolekcja zawiera informacje o wyjątku lub wyjątkach.The InnerExceptions collection contains information about the exception or exceptions.

Przykłady

Poniższy przykład uruchamia zadanie, które generuje 1 000 000 losowe liczby całkowite z zakresu od 0 do 100 i oblicza ich średnią wartość.The following example starts a task that generates one million random integers between 0 and 100 and computes their mean. W przykładzie zastosowano Wait metodę, aby upewnić się, że zadanie zostało ukończone przed zakończeniem działania aplikacji.The example uses the Wait method to ensure that the task completes before the application terminates. W przeciwnym razie, ponieważ jest to Aplikacja konsolowa, przykład zostanie przerwany, zanim zadanie będzie można obliczyć i wyświetlić średnią.Otherwise, because this is a console application, the example would terminate before the task can compute and display the mean.

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
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 jest metodą synchronizacji, która powoduje, że wątek wywołujący czeka na zakończenie bieżącego zadania.Wait is a synchronization method that causes the calling thread to wait until the current task has completed. Jeśli bieżące zadanie nie rozpoczęło wykonywania, Metoda wait podejmie próbę usunięcia zadania z harmonogramu i wykonania go w tym wątku.If the current task has not started execution, the Wait method attempts to remove the task from the scheduler and execute it inline on the current thread. Jeśli nie można tego zrobić, lub jeśli bieżące zadanie już rozpoczęło wykonywanie, blokuje wątek wywołujący do momentu ukończenia zadania.If it is unable to do that, or if the current task has already started execution, it blocks the calling thread until the task completes. Aby uzyskać więcej informacji, zobacz zapoznaj się z tematem zadanie. czekaj i " deznakowanie" na blogu programowanie równoległe przy użyciu platformy .NET.For more information, see Task.Wait and "Inlining" in the Parallel Programming with .NET blog.

Dotyczy