Leer en inglés

Compartir a través de


IAsyncResult Interfaz

Definición

Representa el estado de una operación asincrónica.

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

Ejemplos

En el ejemplo siguiente se muestra cómo usar la AsyncWaitHandle propiedad para obtener un WaitHandley cómo esperar una llamada asincrónica en un delegado. WaitHandle se señaliza cuando finaliza la llamada asincrónica y puede esperar a que termine llamando al método WaitOne .

El ejemplo consta de dos clases: la clase que contiene el método al que se llama de forma asincrónica y la clase que contiene el Main método que realiza la llamada.

Para obtener más información y más ejemplos de llamada a métodos de forma asincrónica mediante delegados, vea Llamar a métodos sincrónicos de forma asincrónica.

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.".
 */

Comentarios

La IAsyncResult interfaz se implementa mediante clases que contienen métodos que pueden funcionar de forma asincrónica. Es el tipo de valor devuelto de métodos que inician una operación asincrónica, como FileStream.BeginRead, y se pasan a métodos que concluyen una operación asincrónica, como FileStream.EndRead. IAsyncResult Los objetos también se pasan a los métodos invocados por AsyncCallback delegados cuando se completa una operación asincrónica.

Un objeto que admite la IAsyncResult interfaz almacena información de estado para una operación asincrónica y proporciona un objeto de sincronización para permitir que los subprocesos se señalen cuando se complete la operación.

Nota

La AsyncResult clase es la implementación de IAsyncResult que devuelve el BeginInvoke método cuando se usa un delegado para llamar a un método de forma asincrónica.

Para obtener una descripción detallada de cómo se usa la IAsyncResult interfaz, consulte el tema Llamar a métodos sincrónicos de forma asincrónica .

Propiedades

AsyncState

Obtiene un objeto definido por el usuario que califica o contiene información sobre una operación asincrónica.

AsyncWaitHandle

Obtiene WaitHandle que se utiliza para esperar a que finalice una operación asincrónica.

CompletedSynchronously

Obtiene un valor que indica si se completó la operación asincrónica de forma sincrónica.

IsCompleted

Obtiene un valor que indica si se completó la operación asincrónica.

Se aplica a

Producto Versiones
.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