Ler em inglês

Compartilhar via


IAsyncResult Interface

Definição

Representa o status de uma operação assíncrona.

C#
public interface IAsyncResult
C#
[System.Runtime.InteropServices.ComVisible(true)]
public interface IAsyncResult
Derivado
Atributos

Exemplos

O exemplo a seguir demonstra como usar a AsyncWaitHandle propriedade para obter uma WaitHandlee como aguardar uma chamada assíncrona em um delegado. O WaitHandle é sinalizado quando a chamada assíncrona é concluída, e você pode esperar por ele chamando o método WaitOne.

O exemplo consiste em duas classes: a classe que contém o método que é chamado de forma assíncrona e a classe que contém o método Main que faz a chamada.

Para obter mais informações e mais exemplos de métodos de chamada de forma assíncrona usando delegados, consulte Chamando métodos síncronos de forma assíncrona.

C#
using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncDemo
    {
        // The method to be executed asynchronously.
        public string TestMethod(int callDuration, out int threadId)
        {
            Console.WriteLine("Test method begins.");
            Thread.Sleep(callDuration);
            threadId = Thread.CurrentThread.ManagedThreadId;
            return String.Format("My call time was {0}.", callDuration.ToString());
        }
    }
    // The delegate must have the same signature as the method
    // it will call asynchronously.
    public delegate string AsyncMethodCaller(int callDuration, out int threadId);
}
C#
using System;
using System.Threading;

namespace Examples.AdvancedProgramming.AsynchronousOperations
{
    public class AsyncMain
    {
        static void Main()
        {
            // The asynchronous method puts the thread id here.
            int threadId;

            // Create an instance of the test class.
            AsyncDemo ad = new AsyncDemo();

            // Create the delegate.
            AsyncMethodCaller caller = new AsyncMethodCaller(ad.TestMethod);

            // Initiate the asychronous call.
            IAsyncResult result = caller.BeginInvoke(3000,
                out threadId, null, null);

            Thread.Sleep(0);
            Console.WriteLine("Main thread {0} does some work.",
                Thread.CurrentThread.ManagedThreadId);

            // Wait for the WaitHandle to become signaled.
            result.AsyncWaitHandle.WaitOne();

            // Perform additional processing here.
            // Call EndInvoke to retrieve the results.
            string returnValue = caller.EndInvoke(out threadId, result);

            // Close the wait handle.
            result.AsyncWaitHandle.Close();

            Console.WriteLine("The call executed on thread {0}, with return value \"{1}\".",
                threadId, returnValue);
        }
    }
}

/* This example produces output similar to the following:

Main thread 1 does some work.
Test method begins.
The call executed on thread 3, with return value "My call time was 3000.".
 */

Comentários

A IAsyncResult interface é implementada por classes que contêm métodos que podem operar de forma assíncrona. É o tipo de retorno de métodos que iniciam uma operação assíncrona, como FileStream.BeginRead, e é passado para métodos que concluem uma operação assíncrona, como FileStream.EndRead. IAsyncResult os objetos também são passados para métodos invocados por AsyncCallback delegados quando uma operação assíncrona é concluída.

Um objeto que dá suporte à IAsyncResult interface armazena informações de estado para uma operação assíncrona e fornece um objeto de sincronização para permitir que os threads sejam sinalizados quando a operação for concluída.

Observação

A AsyncResult classe é a implementação do IAsyncResult que é retornado pelo BeginInvoke método quando você usa um delegado para chamar um método de forma assíncrona.

Para obter uma descrição detalhada de como a IAsyncResult interface é usada, consulte o tópico Chamando Métodos Síncronos de forma assíncrona .

Propriedades

AsyncState

Obtém um objeto definido pelo usuário que qualifica ou contém informações sobre uma operação assíncrona.

AsyncWaitHandle

Obtém um WaitHandle que é usado para aguardar a conclusão de uma operação assíncrona.

CompletedSynchronously

Obtém um valor que indica se a operação assíncrona foi concluída de forma síncrona.

IsCompleted

Obtém um valor que indica se a operação assíncrona foi concluída.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0