Task.Wait Task.Wait Task.Wait Task.Wait Method

Определение

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution.

Перегрузки

Wait(TimeSpan) Wait(TimeSpan) Wait(TimeSpan) Wait(TimeSpan)

Ожидает завершения выполнения задач Task в течение указанного временного периода.Waits for the Task to complete execution within a specified time interval.

Wait(Int32, CancellationToken) Wait(Int32, CancellationToken) Wait(Int32, CancellationToken)

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution. Ожидание завершается, если время ожидания истекает или токен отмены отменяется до завершения задачи.The wait terminates if a timeout interval elapses or a cancellation token is canceled before the task completes.

Wait(CancellationToken) Wait(CancellationToken) Wait(CancellationToken)

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution. Ожидание завершается, если токен отмены отменяется до завершения задачи.The wait terminates if a cancellation token is canceled before the task completes.

Wait(Int32) Wait(Int32) Wait(Int32) Wait(Int32)

Ожидает завершения задачи Task в течение указанного числа миллисекунд.Waits for the Task to complete execution within a specified number of milliseconds.

Wait() Wait() Wait() Wait()

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution.

Wait(TimeSpan) Wait(TimeSpan) Wait(TimeSpan) Wait(TimeSpan)

Ожидает завершения выполнения задач Task в течение указанного временного периода.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

Параметры

timeout
TimeSpan TimeSpan TimeSpan TimeSpan

Период TimeSpan, представляющий время ожидания в миллисекундах, или период TimeSpan, представляющий -1 миллисекунду для неограниченного ожидания.A TimeSpan that represents the number of milliseconds to wait, or a TimeSpan that represents -1 milliseconds to wait indefinitely.

Возвраты

Значение true, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false.true if the Task completed execution within the allotted time; otherwise, false.

Исключения

timeout является отрицательным числом, отличным от -1 миллисекунды, которое представляет неограниченное время ожидания.timeout is a negative number other than -1 milliseconds, which represents an infinite time-out. -или--or- Значение timeout больше значения MaxValue.timeout is greater than MaxValue.

Задача отменена.The task was canceled. Коллекция InnerExceptions содержит объект TaskCanceledException.The InnerExceptions collection contains a TaskCanceledException object.

- или --or- Во время выполнения задачи возникло исключение.An exception was thrown during the execution of the task. Коллекция InnerExceptions содержит сведения об исключении или исключениях.The InnerExceptions collection contains information about the exception or exceptions.

Примеры

В следующем примере запускается задача, создающая 5 000 000 случайных целых чисел от 0 до 100, и вычисляет их среднее значение.The following example starts a task that generates five million random integers between 0 and 100 and computes their mean. В примере используется метод Wait(TimeSpan) для ожидания завершения приложения в течение 150 миллисекунд.The example uses the Wait(TimeSpan) method to wait for the application to complete within 150 milliseconds. Если приложение выполняется в обычном режиме, задача отображает сумму и среднее число созданных случайных чисел.If the application completes normally, the task displays the sum and mean of the random numbers that it has generated. В случае истечения времени ожидания в примере выводится сообщение перед завершением.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.

Комментарии

Wait(TimeSpan) — это метод синхронизации, который заставляет вызывающий поток ожидать завершения текущего экземпляра задачи, пока не произойдет одно из следующих событий: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:

  • Задача завершается успешно.The task completes successfully.

  • Сама задача отменяется или вызывает исключение.The task itself is canceled or throws an exception. В этом случае вы обрабатываете исключение AggregateException.In this case, you handle an AggregateException exception. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • Интервал, определенный параметром timeout, истекает.The interval defined by timeout elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращает false.In this case, the current thread resumes execution and the method returns false.

Wait(Int32, CancellationToken) Wait(Int32, CancellationToken) Wait(Int32, CancellationToken)

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution. Ожидание завершается, если время ожидания истекает или токен отмены отменяется до завершения задачи.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

Параметры

millisecondsTimeout
Int32 Int32 Int32 Int32

Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Токен отмены, который нужно контролировать во время ожидания выполнения задачи.A cancellation token to observe while waiting for the task to complete.

Возвраты

Значение true, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false.true if the Task completed execution within the allotted time; otherwise, false.

Исключения

Объект cancellationToken отменен.The cancellationToken was canceled.

Параметр millisecondsTimeout является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Задача отменена.The task was canceled. Коллекция InnerExceptions содержит объект TaskCanceledException.The InnerExceptions collection contains a TaskCanceledException object.

- или --or- Во время выполнения задачи возникло исключение.An exception was thrown during the execution of the task. Коллекция InnerExceptions содержит сведения об исключении или исключениях.The InnerExceptions collection contains information about the exception or exceptions.

Примеры

В следующем примере вызывается метод Wait(Int32, CancellationToken) для предоставления значения времени ожидания и токена отмены, который может завершить ожидание завершения задачи.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. Запускается новый поток и выполняется метод CancelToken, который приостанавливает и затем вызывает метод CancellationTokenSource.Cancel для отмены токенов отмены.A new thread is started and executes the CancelToken method, which pauses and then calls the CancellationTokenSource.Cancel method to cancel the cancellation tokens. Затем запускается задача и задерживается в течение 5 секунд.A task is then launched and delays for 5 seconds. Затем вызывается метод Wait, чтобы дождаться завершения задачи и предоставить краткое значение времени ожидания и токен отмены.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...

Обратите внимание, что точные выходные данные из примера зависят от того, было ли отменено ожидание из-за токена отмены или из-за истечения времени ожидания.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.

Комментарии

Wait(Int32, CancellationToken) — это метод синхронизации, который заставляет вызывающий поток ожидать завершения текущего экземпляра задачи, пока не произойдет одно из следующих событий: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:

  • Задача завершается успешно.The task completes successfully.

  • Сама задача отменяется или вызывает исключение.The task itself is canceled or throws an exception. В этом случае вы обрабатываете исключение AggregateException.In this case, you handle an AggregateException exception. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • Токен отмены cancellationToken отменен.The cancellationToken cancellation token is canceled. В этом случае вызов метода Wait(Int32, CancellationToken) вызывает исключение OperationCanceledException.In this case, the call to the Wait(Int32, CancellationToken) method throws an OperationCanceledException.

  • Интервал, определенный параметром millisecondsTimeout, истекает.The interval defined by millisecondsTimeout elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращает false.In this case, the current thread resumes execution and the method returns false.

Примечание

Отмена маркера отмены cancellationToken не влияет на выполняемую задачу, если она не передала токен отмены и подготовлена к обработке отмены.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. Передача объекта cancellationToken в этот метод просто позволяет отменить ожидание в зависимости от какого-либо условия.Passing the cancellationToken object to this method simply allows the wait to be canceled based on some condition.

Wait(CancellationToken) Wait(CancellationToken) Wait(CancellationToken)

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution. Ожидание завершается, если токен отмены отменяется до завершения задачи.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

Параметры

cancellationToken
CancellationToken CancellationToken CancellationToken CancellationToken

Токен отмены, который нужно контролировать во время ожидания выполнения задачи.A cancellation token to observe while waiting for the task to complete.

Исключения

Объект cancellationToken отменен.The cancellationToken was canceled.

Задача была удалена.The task has been disposed.

Задача отменена.The task was canceled. Коллекция InnerExceptions содержит объект TaskCanceledException.The InnerExceptions collection contains a TaskCanceledException object.

-или--or- Во время выполнения задачи возникло исключение.An exception was thrown during the execution of the task. Коллекция InnerExceptions содержит сведения об исключении или исключениях.The InnerExceptions collection contains information about the exception or exceptions.

Примеры

В следующем примере показано простое использование токена отмены для отмены ожидания завершения задачи.The following example illustrates the simple use of a cancellation token to cancel waiting for a task's completion. Запускается задача, вызывает метод CancellationTokenSource.Cancel для отмены любых токенов отмены источника маркера, а затем задерживается в течение пяти секунд.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. Обратите внимание, что сама задача не передала токен отмены и не может быть отменена.Note that the task itself has not been passed the cancellation token and is not cancelable. Поток приложения вызывает метод Task.Wait задачи, чтобы дождаться завершения задачи, но ожидание отменяется после отмены токена отмены и выдачи 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. Обработчик исключений сообщает об исключении, а затем заждет шесть секунд.The exception handler reports the exception and then sleeps for six seconds. Как видно из выходных данных примера, эта задержка позволяет задаче завершиться в состоянии RanToCompletion.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

Комментарии

Метод Wait(CancellationToken) создает отменяемое ожидание; то есть, это приводит к тому, что текущий поток ждет, пока не произойдет одно из следующих событий:The Wait(CancellationToken) method creates a cancelable wait; that is, it causes the current thread to wait until one of the following occurs:

Примечание

Отмена маркера отмены cancellationToken не влияет на выполняемую задачу, если она не передала токен отмены и подготовлена к обработке отмены.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. Передача объекта cancellationToken в этот метод просто позволяет отменить ожидание.Passing the cancellationToken object to this method simply allows the wait to be canceled.

Wait(Int32) Wait(Int32) Wait(Int32) Wait(Int32)

Ожидает завершения задачи Task в течение указанного числа миллисекунд.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

Параметры

millisecondsTimeout
Int32 Int32 Int32 Int32

Время ожидания в миллисекундах или функция Infinite (-1) в случае неограниченного времени ожидания.The number of milliseconds to wait, or Infinite (-1) to wait indefinitely.

Возвраты

Значение true, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false.true if the Task completed execution within the allotted time; otherwise, false.

Исключения

Параметр millisecondsTimeout является отрицательным числом, отличным от –1, что означает бесконечное время ожидания.millisecondsTimeout is a negative number other than -1, which represents an infinite time-out.

Задача отменена.The task was canceled. Коллекция InnerExceptions содержит объект TaskCanceledException.The InnerExceptions collection contains a TaskCanceledException object.

- или --or- Во время выполнения задачи возникло исключение.An exception was thrown during the execution of the task. Коллекция InnerExceptions содержит сведения об исключении или исключениях.The InnerExceptions collection contains information about the exception or exceptions.

Примеры

В следующем примере запускается задача, создающая 5 000 000 случайных целых чисел от 0 до 100, и вычисляет их среднее значение.The following example starts a task that generates five million random integers between 0 and 100 and computes their mean. В примере используется метод Wait(Int32) для ожидания завершения приложения в течение 150 миллисекунд.The example uses the Wait(Int32) method to wait for the application to complete within 150 milliseconds. Если приложение выполняется в обычном режиме, задача отображает сумму и среднее число созданных случайных чисел.If the application completes normally, the task displays the sum and mean of the random numbers that it has generated. В случае истечения времени ожидания в примере выводится сообщение перед завершением.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.

Комментарии

Wait(Int32) — это метод синхронизации, который заставляет вызывающий поток ожидать завершения текущего экземпляра задачи, пока не произойдет одно из следующих событий: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:

  • Задача завершается успешно.The task completes successfully.

  • Сама задача отменяется или вызывает исключение.The task itself is canceled or throws an exception. В этом случае вы обрабатываете исключение AggregateException.In this case, you handle an AggregateException exception. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.The AggregateException.InnerExceptions property contains details about the exception or exceptions.

  • Интервал, определенный параметром millisecondsTimeout, истекает.The interval defined by millisecondsTimeout elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращает false.In this case, the current thread resumes execution and the method returns false.

Wait() Wait() Wait() Wait()

Ожидает завершения выполнения задачи Task.Waits for the Task to complete execution.

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

Исключения

Задача отменена.The task was canceled. Коллекция InnerExceptions содержит объект TaskCanceledException.The InnerExceptions collection contains a TaskCanceledException object.

- или --or- Во время выполнения задачи возникло исключение.An exception was thrown during the execution of the task. Коллекция InnerExceptions содержит сведения об исключении или исключениях.The InnerExceptions collection contains information about the exception or exceptions.

Примеры

В следующем примере запускается задача, создающая 1 000 000 случайных целых чисел от 0 до 100, и вычисляет их среднее значение.The following example starts a task that generates one million random integers between 0 and 100 and computes their mean. В примере используется метод Wait, чтобы обеспечить завершение задачи до завершения работы приложения.The example uses the Wait method to ensure that the task completes before the application terminates. В противном случае, поскольку это консольное приложение, пример будет прерван, прежде чем задача сможет вычислить и отобразить среднее значение.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

Комментарии

Wait — это метод синхронизации, который вызывает ожидание вызывающим потоком до завершения текущей задачи.Wait is a synchronization method that causes the calling thread to wait until the current task has completed. Если текущая задача не начала выполнение, метод Wait пытается удалить задачу из планировщика и выполнить ее встроенное в текущем потоке.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. Если это невозможно, или если текущая задача уже запустила выполнение, она блокирует вызывающий поток до завершения задачи.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. Дополнительные сведения см. в разделе Task. Wait и "Встраивание" в блоге параллельного программирования с .NET.For more information, see Task.Wait and "Inlining" in the Parallel Programming with .NET blog.

Дополнительно

Применяется к