Task.Wait Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Wacht totdat de Task uitvoering is voltooid.
Overloads
| Name | Description |
|---|---|
| Wait(TimeSpan) |
Wacht totdat de Task uitvoering binnen een opgegeven tijdsinterval is voltooid. |
| Wait(Int32, CancellationToken) |
Wacht totdat de Task uitvoering is voltooid. De wachttijd wordt beëindigd als een time-outinterval is verstreken of een annuleringstoken wordt geannuleerd voordat de taak is voltooid. |
| Wait(CancellationToken) |
Wacht totdat de Task uitvoering is voltooid. De wachttijd wordt beëindigd als een annuleringstoken wordt geannuleerd voordat de taak is voltooid. |
| Wait(Int32) |
Wacht totdat de Task uitvoering binnen een opgegeven aantal milliseconden is voltooid. |
| Wait() |
Wacht totdat de Task uitvoering is voltooid. |
Wait(TimeSpan)
Wacht totdat de Task uitvoering binnen een opgegeven tijdsinterval is voltooid.
public:
bool Wait(TimeSpan timeout);
public bool Wait(TimeSpan timeout);
member this.Wait : TimeSpan -> bool
Public Function Wait (timeout As TimeSpan) As Boolean
Parameters
- timeout
- TimeSpan
Een TimeSpan die het aantal milliseconden aangeeft dat moet worden gewacht, of een TimeSpan waarde die -1 milliseconden vertegenwoordigt om voor onbepaalde tijd te wachten.
Retouren
trueindien de voltooide uitvoering binnen de Task toegewezen tijd; anders . false
Uitzonderingen
De Task is verwijderd.
timeout is een ander negatief getal dan -1 milliseconden, wat een oneindige time-out vertegenwoordigt.
– of –
timeout is groter dan Int32.MaxValue.
De taak is geannuleerd. De InnerExceptions verzameling bevat een TaskCanceledException object.
– of –
Er is een uitzondering opgetreden tijdens de uitvoering van de taak. De InnerExceptions verzameling bevat informatie over de uitzondering of uitzonderingen.
Voorbeelden
In het volgende voorbeeld wordt een taak gestart waarmee vijf miljoen willekeurige gehele getallen tussen 0 en 100 worden gegenereerd en het gemiddelde wordt berekend. In het voorbeeld wordt de Wait(TimeSpan) methode gebruikt om te wachten totdat de toepassing binnen 150 milliseconden is voltooid. Als de toepassing normaal is voltooid, geeft de taak de som en het gemiddelde weer van de willekeurige getallen die de toepassing heeft gegenereerd. Als het time-outinterval is verstreken, wordt in het voorbeeld een bericht weergegeven voordat het wordt beëindigd.
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.
Opmerkingen
Wait(TimeSpan) is een synchronisatiemethode die ervoor zorgt dat de aanroepende thread wacht totdat het huidige taakexemplaren zijn voltooid totdat een van de volgende handelingen plaatsvindt:
De taak is voltooid.
De taak zelf wordt geannuleerd of genereert een uitzondering. In dit geval verwerkt u een AggregateException uitzondering. De AggregateException.InnerExceptions eigenschap bevat details over de uitzondering of uitzonderingen.
Het interval dat is gedefinieerd door
timeoutverstreken. In dit geval hervat de huidige thread de uitvoering en retourneertfalsede methode.
Van toepassing op
Wait(Int32, CancellationToken)
Wacht totdat de Task uitvoering is voltooid. De wachttijd wordt beëindigd als een time-outinterval is verstreken of een annuleringstoken wordt geannuleerd voordat de taak is voltooid.
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
Parameters
- millisecondsTimeout
- Int32
Het aantal milliseconden dat moet worden gewacht, of Infinite (-1) om voor onbepaalde tijd te wachten.
- cancellationToken
- CancellationToken
Een annuleringstoken dat u kunt observeren terwijl wordt gewacht totdat de taak is voltooid.
Retouren
trueindien de voltooide uitvoering binnen de Task toegewezen tijd; anders . false
Uitzonderingen
De cancellationToken is geannuleerd.
De Task is verwijderd.
millisecondsTimeout is een ander negatief getal dan -1, dat een oneindige time-out vertegenwoordigt.
De taak is geannuleerd. De InnerExceptions verzameling bevat een TaskCanceledException object.
– of –
Er is een uitzondering opgetreden tijdens de uitvoering van de taak. De InnerExceptions verzameling bevat informatie over de uitzondering of uitzonderingen.
Voorbeelden
In het volgende voorbeeld wordt de Wait(Int32, CancellationToken) methode aangeroepen om zowel een time-outwaarde als een annuleringstoken op te geven waarmee het wachten op voltooiing van een taak kan worden beëindigd. Er wordt een nieuwe thread gestart en de methode uitgevoerd, die pauzeert en vervolgens de CancellationTokenSource.Cancel methode aanroept CancelToken om de annuleringstokens te annuleren. Er wordt vervolgens een taak gestart en wordt vijf seconden vertraagd. De Wait methode wordt vervolgens aangeroepen om te wachten op de voltooiing van de taak en wordt zowel een korte time-outwaarde als een annuleringstoken opgegeven.
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...
Houd er rekening mee dat de exacte uitvoer van het voorbeeld afhankelijk is van of de wachttijd is geannuleerd vanwege het annuleringstoken of omdat het time-outinterval is verstreken.
Opmerkingen
Wait(Int32, CancellationToken) is een synchronisatiemethode die ervoor zorgt dat de aanroepende thread wacht totdat het huidige taakexemplaren zijn voltooid totdat een van de volgende handelingen plaatsvindt:
De taak is voltooid.
De taak zelf wordt geannuleerd of genereert een uitzondering. In dit geval verwerkt u een AggregateException uitzondering. De AggregateException.InnerExceptions eigenschap bevat details over de uitzondering of uitzonderingen.
Het
cancellationTokenannuleringstoken wordt geannuleerd. In dit geval genereert de aanroep van de Wait(Int32, CancellationToken) methode een OperationCanceledException.Het interval dat is gedefinieerd door
millisecondsTimeoutverstreken. In dit geval hervat de huidige thread de uitvoering en retourneertfalsede methode.
Note
Het annuleren van het cancellationToken annuleringstoken heeft geen effect op de actieve taak, tenzij het ook is doorgegeven aan het annuleringstoken en is voorbereid om de annulering af te handelen. Door het cancellationToken object aan deze methode door te geven, kan het wachten worden geannuleerd op basis van een bepaalde voorwaarde.
Van toepassing op
Wait(CancellationToken)
Wacht totdat de Task uitvoering is voltooid. De wachttijd wordt beëindigd als een annuleringstoken wordt geannuleerd voordat de taak is voltooid.
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)
Parameters
- cancellationToken
- CancellationToken
Een annuleringstoken dat u kunt observeren terwijl wordt gewacht totdat de taak is voltooid.
Uitzonderingen
De cancellationToken is geannuleerd.
De taak is verwijderd.
De taak is geannuleerd. De InnerExceptions verzameling bevat een TaskCanceledException object.
– of –
Er is een uitzondering opgetreden tijdens de uitvoering van de taak. De InnerExceptions verzameling bevat informatie over de uitzondering of uitzonderingen.
Voorbeelden
In het volgende voorbeeld ziet u het eenvoudige gebruik van een annuleringstoken om te annuleren totdat een taak is voltooid. Er wordt een taak gestart, de CancellationTokenSource.Cancel methode aangeroepen om een van de annuleringstokens van de tokenbron te annuleren en wordt vervolgens vijf seconden vertraagd. Houd er rekening mee dat de taak zelf niet is doorgegeven aan het annuleringstoken en niet kan worden geannuleerd. De toepassingsthread roept de methode van Task.Wait de taak aan om te wachten tot de taak is voltooid, maar de wachttijd wordt geannuleerd zodra het annuleringstoken is geannuleerd en er een OperationCanceledException wordt gegenereerd. De uitzonderingshandler rapporteert de uitzondering en slaapt vervolgens zes seconden. Zoals de uitvoer uit het voorbeeld laat zien, kan de taak met die vertraging worden voltooid in de RanToCompletion status.
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
Opmerkingen
De Wait(CancellationToken) methode maakt een annuleerbare wachttijd. Dat wil zeggen dat de huidige thread moet wachten tot een van de volgende handelingen plaatsvindt:
De taak is voltooid.
Het annuleringstoken wordt geannuleerd. In dit geval genereert de aanroep van de Wait(CancellationToken) methode een OperationCanceledException.
Note
Het annuleren van het cancellationToken annuleringstoken heeft geen effect op de actieve taak, tenzij het ook is doorgegeven aan het annuleringstoken en is voorbereid om de annulering af te handelen. Door het cancellationToken object aan deze methode door te geven, kan het wachten worden geannuleerd.
Van toepassing op
Wait(Int32)
Wacht totdat de Task uitvoering binnen een opgegeven aantal milliseconden is voltooid.
public:
bool Wait(int millisecondsTimeout);
public bool Wait(int millisecondsTimeout);
member this.Wait : int -> bool
Public Function Wait (millisecondsTimeout As Integer) As Boolean
Parameters
- millisecondsTimeout
- Int32
Het aantal milliseconden dat moet worden gewacht, of Infinite (-1) om voor onbepaalde tijd te wachten.
Retouren
trueindien de voltooide uitvoering binnen de Task toegewezen tijd; anders . false
Uitzonderingen
De Task is verwijderd.
millisecondsTimeout is een ander negatief getal dan -1, dat een oneindige time-out vertegenwoordigt.
De taak is geannuleerd. De InnerExceptions verzameling bevat een TaskCanceledException object.
– of –
Er is een uitzondering opgetreden tijdens de uitvoering van de taak. De InnerExceptions verzameling bevat informatie over de uitzondering of uitzonderingen.
Voorbeelden
In het volgende voorbeeld wordt een taak gestart waarmee vijf miljoen willekeurige gehele getallen tussen 0 en 100 worden gegenereerd en het gemiddelde wordt berekend. In het voorbeeld wordt de Wait(Int32) methode gebruikt om te wachten totdat de toepassing binnen 150 milliseconden is voltooid. Als de toepassing normaal is voltooid, geeft de taak de som en het gemiddelde weer van de willekeurige getallen die de toepassing heeft gegenereerd. Als het time-outinterval is verstreken, wordt in het voorbeeld een bericht weergegeven voordat het wordt beëindigd.
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.
Opmerkingen
Wait(Int32) is een synchronisatiemethode die ervoor zorgt dat de aanroepende thread wacht totdat het huidige taakexemplaren zijn voltooid totdat een van de volgende handelingen plaatsvindt:
De taak is voltooid.
De taak zelf wordt geannuleerd of genereert een uitzondering. In dit geval verwerkt u een AggregateException uitzondering. De AggregateException.InnerExceptions eigenschap bevat details over de uitzondering of uitzonderingen.
Het interval dat is gedefinieerd door
millisecondsTimeoutverstreken. In dit geval hervat de huidige thread de uitvoering en retourneertfalsede methode.
Van toepassing op
Wait()
Wacht totdat de Task uitvoering is voltooid.
public:
void Wait();
public void Wait();
member this.Wait : unit -> unit
Public Sub Wait ()
Uitzonderingen
De Task is verwijderd.
De taak is geannuleerd. De InnerExceptions verzameling bevat een TaskCanceledException object.
– of –
Er is een uitzondering opgetreden tijdens de uitvoering van de taak. De InnerExceptions verzameling bevat informatie over de uitzondering of uitzonderingen.
Voorbeelden
In het volgende voorbeeld wordt een taak gestart waarmee één miljoen willekeurige gehele getallen tussen 0 en 100 worden gegenereerd en het gemiddelde wordt berekend. In het voorbeeld wordt de Wait methode gebruikt om ervoor te zorgen dat de taak is voltooid voordat de toepassing wordt beëindigd. Anders, omdat dit een consoletoepassing is, wordt het voorbeeld beëindigd voordat de taak het gemiddelde kan berekenen en weergeven.
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
Opmerkingen
Wait is een synchronisatiemethode die ervoor zorgt dat de aanroepende thread wacht totdat de huidige taak is voltooid. Als de huidige taak niet is gestart, probeert de wachtmethode de taak uit de scheduler te verwijderen en inline uit te voeren op de huidige thread. Als dit niet lukt of als de huidige taak al is gestart, wordt de aanroepende thread geblokkeerd totdat de taak is voltooid. Zie Task.Wait and "Inlining" in the Parallel Programming met .NET blog voor meer informatie.