Task.Wait Methode

Definitie

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 timeout verstreken. In dit geval hervat de huidige thread de uitvoering en retourneert falsede 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 cancellationToken annuleringstoken wordt geannuleerd. In dit geval genereert de aanroep van de Wait(Int32, CancellationToken) methode een OperationCanceledException.

  • Het interval dat is gedefinieerd door millisecondsTimeout verstreken. In dit geval hervat de huidige thread de uitvoering en retourneert falsede 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:

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 millisecondsTimeout verstreken. In dit geval hervat de huidige thread de uitvoering en retourneert falsede 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.

Zie ook

Van toepassing op