Поделиться через


Task.Wait Метод

Определение

Task Ожидает завершения выполнения.

Перегрузки

Имя Описание
Wait(TimeSpan, CancellationToken)

Task Ожидает завершения выполнения.

Wait(Int32, CancellationToken)

Task Ожидает завершения выполнения. Ожидание завершается, если интервал времени ожидания истекает или маркер отмены отмены будет отменен до завершения задачи.

Wait(TimeSpan)

Task Ожидает завершения выполнения в течение указанного интервала времени.

Wait(CancellationToken)

Task Ожидает завершения выполнения. Ожидание завершается, если маркер отмены отменен до завершения задачи.

Wait()

Task Ожидает завершения выполнения.

Wait(Int32)

Task Ожидает завершения выполнения в пределах указанного числа миллисекунда.

Wait(TimeSpan, CancellationToken)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения.

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

Параметры

timeout
TimeSpan

Время ожидания или InfiniteTimeSpan ожидание на неопределенный срок

cancellationToken
CancellationToken

Необходимо CancellationToken наблюдать за ожиданием завершения задачи.

Возвращаемое значение

Значение />, если завершенное выполнение в течение выделенного времени; в противном случае .

Исключения

Отменено Task

–или–

исключение было создано во время выполнения Taskобъекта .

timeout — отрицательное число, отличное от -1 миллисекунда, которое представляет бесконечное время ожидания

–или–

время ожидания больше MaxValue.

Объект cancellationToken отменен.

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

Wait(Int32, CancellationToken)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения. Ожидание завершается, если интервал времени ожидания истекает или маркер отмены отмены будет отменен до завершения задачи.

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

Параметры

millisecondsTimeout
Int32

Количество миллисекунда, ожидающее или Infinite (-1) для ожидания на неопределенный срок.

cancellationToken
CancellationToken

Маркер отмены, который следует наблюдать во время ожидания завершения задачи.

Возвращаемое значение

Значение />, если завершенное выполнение в течение выделенного времени; в противном случае .

Исключения

Объект cancellationToken отменен.

Он Task был удален.

millisecondsTimeout — отрицательное число, отличное от -1, которое представляет бесконечное время ожидания.

Задача была отменена. Коллекция InnerExceptions содержит TaskCanceledException объект.

–или–

Исключение было создано во время выполнения задачи. Коллекция InnerExceptions содержит сведения об исключении или исключениях.

Примеры

В следующем примере вызывается Wait(Int32, CancellationToken) метод для предоставления значения времени ожидания и маркера отмены, который может завершить ожидание завершения задачи. Запускается новый поток и выполняется метод, который приостанавливает CancelToken и вызывает CancellationTokenSource.Cancel метод для отмены маркеров отмены. Затем задача запускается и задерживается в течение 5 секунд. Затем Wait метод вызывается для ожидания завершения задачи и предоставляется как краткое значение времени ожидания, так и маркер отмены.

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

Обратите внимание, что точные выходные данные из примера зависят от того, было ли отменено ожидание из-за маркера отмены или из-за истечения интервала времени ожидания.

Комментарии

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

  • Задача успешно завершена.

  • Сама задача отменена или вызывает исключение. В этом случае вы обрабатываете AggregateException исключение. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.

  • cancellationToken Маркер отмены отменен. В этом случае вызов Wait(Int32, CancellationToken) метода вызывает OperationCanceledExceptionисключение.

  • Интервал, определенный millisecondsTimeout истекает. В этом случае текущий поток возобновляет выполнение и возвращает falseметод.

Замечание

Отмена cancellationToken маркера отмены не влияет на выполнение задачи, если она также не была передана маркеру отмены и готова обрабатывать отмену. cancellationToken Передача объекта этому методу позволяет просто отменить ожидание на основе какого-то условия.

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

Wait(TimeSpan)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения в течение указанного интервала времени.

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

Возвращаемое значение

Значение />, если завершенное выполнение в течение выделенного времени; в противном случае .

Исключения

Он Task был удален.

timeout — отрицательное число, отличное от -1 миллисекундах, которое представляет бесконечное время ожидания.

–или–

timeout больше int32.MaxValue.

Задача была отменена. Коллекция InnerExceptions содержит TaskCanceledException объект.

–или–

Исключение было создано во время выполнения задачи. Коллекция InnerExceptions содержит сведения об исключении или исключениях.

Примеры

В следующем примере запускается задача, которая создает пять миллионов случайных целых чисел от 0 до 100 и вычисляет их среднее значение. В этом примере метод используется Wait(TimeSpan) для ожидания завершения приложения в течение 150 миллисекунда. Если приложение завершается нормально, задача отображает сумму и среднее значение случайных чисел, созданных им. Если интервал времени ожидания истек, в примере отображается сообщение перед завершением.

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.

Комментарии

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

  • Задача успешно завершена.

  • Сама задача отменена или вызывает исключение. В этом случае вы обрабатываете AggregateException исключение. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.

  • Интервал, определенный timeout истекает. В этом случае текущий поток возобновляет выполнение и возвращает falseметод.

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

Wait(CancellationToken)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения. Ожидание завершается, если маркер отмены отменен до завершения задачи.

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)

Параметры

cancellationToken
CancellationToken

Маркер отмены, который следует наблюдать во время ожидания завершения задачи.

Исключения

Объект cancellationToken отменен.

Задача удалена.

Задача была отменена. Коллекция InnerExceptions содержит TaskCanceledException объект.

–или–

Исключение было создано во время выполнения задачи. Коллекция InnerExceptions содержит сведения об исключении или исключениях.

Примеры

В следующем примере показано простое использование маркера отмены для отмены ожидания завершения задачи. Задача запускается, вызывает CancellationTokenSource.Cancel метод, чтобы отменить любой из маркеров отмены источника маркеров, а затем задержки в течение пяти секунд. Обратите внимание, что сама задача не была передана маркеру отмены и не может быть отменена. Поток приложения вызывает метод задачи, чтобы ждать завершения задачи Task.Wait , но ожидание отменяется после отмены маркера отмены и OperationCanceledException создается исключение. Обработчик исключений сообщает об исключении, а затем выполняет спящий режим в течение шести секунд. Как показано в выходных данных из примера, задержка позволяет задаче выполняться в RanToCompletion состоянии.

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

Комментарии

Метод Wait(CancellationToken) создает отменяемое ожидание. Т. е. вызывает ожидание текущего потока до тех пор, пока не будет выполнено одно из следующих действий:

Замечание

Отмена cancellationToken маркера отмены не влияет на выполнение задачи, если она также не была передана маркеру отмены и готова обрабатывать отмену. cancellationToken Передача объекта этому методу позволяет просто отменить ожидание.

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

Wait()

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения.

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

Исключения

Он Task был удален.

Задача была отменена. Коллекция InnerExceptions содержит TaskCanceledException объект.

–или–

Исключение было создано во время выполнения задачи. Коллекция InnerExceptions содержит сведения об исключении или исключениях.

Примеры

В следующем примере запускается задача, которая создает миллион случайных целых чисел от 0 до 100 и вычисляет их среднее значение. В примере используется Wait метод, чтобы убедиться, что задача завершается до завершения работы приложения. В противном случае, так как это консольное приложение, пример завершится до того, как задача сможет вычислить и отобразить среднее значение.

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

Комментарии

Wait — это метод синхронизации, который вызывает поток ожидания до завершения текущей задачи. Если текущая задача не запущена, метод Wait пытается удалить задачу из планировщика и выполнить ее встроенным в текущем потоке. Если это не удается сделать или если текущая задача уже запущена, он блокирует вызывающий поток до завершения задачи. Дополнительные сведения см. в разделе Task.Wait и Inlining в блоге по параллельному программированию с помощью .NET.

См. также раздел

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

Wait(Int32)

Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs
Исходный код:
Task.cs

Task Ожидает завершения выполнения в пределах указанного числа миллисекунда.

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

Количество миллисекунда, ожидающее или Infinite (-1) для ожидания на неопределенный срок.

Возвращаемое значение

Значение />, если завершенное выполнение в течение выделенного времени; в противном случае .

Исключения

Он Task был удален.

millisecondsTimeout — отрицательное число, отличное от -1, которое представляет бесконечное время ожидания.

Задача была отменена. Коллекция InnerExceptions содержит TaskCanceledException объект.

–или–

Исключение было создано во время выполнения задачи. Коллекция InnerExceptions содержит сведения об исключении или исключениях.

Примеры

В следующем примере запускается задача, которая создает пять миллионов случайных целых чисел от 0 до 100 и вычисляет их среднее значение. В этом примере метод используется Wait(Int32) для ожидания завершения приложения в течение 150 миллисекунда. Если приложение завершается нормально, задача отображает сумму и среднее значение случайных чисел, созданных им. Если интервал времени ожидания истек, в примере отображается сообщение перед завершением.

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.

Комментарии

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

  • Задача успешно завершена.

  • Сама задача отменена или вызывает исключение. В этом случае вы обрабатываете AggregateException исключение. Свойство AggregateException.InnerExceptions содержит сведения об исключении или исключениях.

  • Интервал, определенный millisecondsTimeout истекает. В этом случае текущий поток возобновляет выполнение и возвращает falseметод.

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