Delen via


Toepassingsuitvoering blokkeren met behulp van een AsyncWaitHandle

Toepassingen die niet verder kunnen werken terwijl ze wachten op de resultaten van een asynchrone bewerking, moeten worden geblokkeerd totdat de bewerking is voltooid. Gebruik een van de volgende opties om de hoofdthread van uw toepassing te blokkeren terwijl u wacht tot een asynchrone bewerking is voltooid:

Toepassingen die een of meer WaitHandle objecten gebruiken om te blokkeren totdat een asynchrone bewerking is voltooid, roepen doorgaans de methode BeginOperationName aan, voer alle werkzaamheden uit die zonder de resultaten van de bewerking kunnen worden uitgevoerd en blokkeren totdat de asynchrone bewerking(en) is voltooid. Een toepassing kan één bewerking blokkeren door een van de WaitOne methoden aan te roepen met behulp van de AsyncWaitHandle. Als u wilt blokkeren terwijl u wacht tot een set asynchrone bewerkingen is voltooid, slaat u de bijbehorende AsyncWaitHandle objecten op in een matrix en roept u een van de WaitAll methoden aan. Als u wilt blokkeren terwijl u wacht tot een van een set asynchrone bewerkingen is voltooid, slaat u de bijbehorende AsyncWaitHandle objecten op in een matrix en roept u een van de WaitAny methoden aan.

Voorbeeld

In het volgende codevoorbeeld ziet u hoe u asynchrone methoden in de DNS-klasse gebruikt om domain name system-informatie op te halen voor een door de gebruiker opgegeven computer. In het voorbeeld wordt het blokkeren gedemonstreerd met behulp van de WaitHandle die aan de asynchrone bewerking is gekoppeld. Houd er rekening mee dat null (Nothing in Visual Basic) wordt doorgegeven voor de parameters BeginGetHostByNamerequestCallback en stateObject, omdat deze niet vereist zijn bij het gebruik van deze methode.

/*
The following example demonstrates using asynchronous methods to
get Domain Name System information for the specified host computer.

*/

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class WaitUntilOperationCompletes
    {
        public static void Main(string[] args)
        {
            // Make sure the caller supplied a host name.
            if (args.Length == 0 || args[0].Length == 0)
            {
                // Print a message and exit.
                Console.WriteLine("You must specify the name of a host computer.");
                return;
            }
            // Start the asynchronous request for DNS information.
            IAsyncResult result = Dns.BeginGetHostEntry(args[0], null, null);
            Console.WriteLine("Processing request for information...");
            // Wait until the operation completes.
            result.AsyncWaitHandle.WaitOne();
            // The operation completed. Process the results.
            try
            {
                // Get the results.
                IPHostEntry host = Dns.EndGetHostEntry(result);
                string[] aliases = host.Aliases;
                IPAddress[] addresses = host.AddressList;
                if (aliases.Length > 0)
                {
                    Console.WriteLine("Aliases");
                    for (int i = 0; i < aliases.Length; i++)
                    {
                        Console.WriteLine($"{aliases[i]}");
                    }
                }
                if (addresses.Length > 0)
                {
                    Console.WriteLine("Addresses");
                    for (int i = 0; i < addresses.Length; i++)
                    {
                        Console.WriteLine($"{addresses[i].ToString()}");
                    }
                }
            }
            catch (SocketException e)
            {
                Console.WriteLine($"Exception occurred while processing the request: {e.Message}");
            }
        }
    }
}
' The following example demonstrates using asynchronous methods to
' get Domain Name System information for the specified host computer.

Imports System.Net
Imports System.Net.Sockets
Imports System.Threading

namespace Examples.AdvancedProgramming.AsynchronousOperations
    Public Class WaitUntilOperationCompletes

        Public Shared Sub Main(args() as String)
            ' Make sure the caller supplied a host name.
            If (args.Length = 0)
                ' Print a message and exit.
                Console.WriteLine("You must specify the name of a host computer.")
                End
            End If
            ' Start the asynchronous request for DNS information.
            Dim result as IAsyncResult = Dns.BeginGetHostEntry(args(0), Nothing, Nothing)
            Console.WriteLine("Processing request for information...")
            ' Wait until the operation completes.
            result.AsyncWaitHandle.WaitOne()
            ' The operation completed. Process the results.
            Try
                ' Get the results.
                Dim host as IPHostEntry = Dns.EndGetHostEntry(result)
                Dim aliases() as String = host.Aliases
                Dim addresses() as IPAddress = host.AddressList
                Dim i as Integer
                If aliases.Length > 0
                    Console.WriteLine("Aliases")
                    For i = 0 To aliases.Length - 1
                        Console.WriteLine("{0}", aliases(i))
                    Next i
                End If
                If addresses.Length > 0
                    Console.WriteLine("Addresses")
                    For i = 0 To addresses.Length - 1
                        Console.WriteLine("{0}", addresses(i).ToString())
                    Next i
                End If
            Catch e as SocketException
                Console.WriteLine("An exception occurred while processing the request: {0}" _
                  , e.Message)
            End Try
        End Sub
    End Class
End Namespace

Zie ook