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.
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 наблюдения во время ожидания завершения задачи.
Возвращаемое значение
Значение true
, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false
.
Исключения
timeout
— отрицательное число, отличное от –1 миллисекунда, которое представляет бесконечное время ожидания.
-или-
Время ожидания больше MaxValue.
Объект cancellationToken
отменен.
Применяется к
Wait(Int32, CancellationToken)
- Исходный код:
- 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
Токен отмены, который нужно контролировать во время ожидания выполнения задачи.
Возвращаемое значение
Значение true
, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false
.
Исключения
Объект 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
в параметрах elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращает .false
Примечание
Отмена маркера cancellationToken
отмены не влияет на выполняющуюся задачу, если она также не была передана маркером отмены и не готова к обработке отмены.
cancellationToken
Передача объекта в этот метод просто позволяет отменить ожидание в зависимости от определенного условия.
Применяется к
Wait(TimeSpan)
- Исходный код:
- 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 миллисекунду для неограниченного ожидания.
Возвращаемое значение
Значение true
, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false
.
Исключения
Объект 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
в параметрах elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращает .false
Применяется к
Wait(CancellationToken)
- Исходный код:
- 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) создает отменяемое ожидание, то есть вызывает ожидание текущего потока, пока не произойдет одно из следующих действий:
Задача завершается.
Маркер отмены отменен. В этом случае вызов Wait(CancellationToken) метода вызывает исключение OperationCanceledException.
Примечание
Отмена маркера cancellationToken
отмены не влияет на выполняемую задачу, если она также не была передана маркером отмены и не готова к обработке отмены.
cancellationToken
Передача объекта в этот метод просто позволяет отменить ожидание.
Применяется к
Wait()
- Исходный код:
- 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 в течение указанного числа миллисекунд.
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) в случае неограниченного времени ожидания.
Возвращаемое значение
Значение true
, если Task завершил выполнение в течение отведенного времени; в противном случае — значение false
.
Исключения
Объект 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
в параметрах elapses. В этом случае текущий поток возобновляет выполнение, а метод возвращаетfalse
.