Esta documentación está archivada y no tiene mantenimiento.

IAsyncResult (Interfaz)

Actualización: noviembre 2007

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

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(true)]
public interface IAsyncResult
/** @attribute ComVisibleAttribute(true) */
public interface IAsyncResult
public interface IAsyncResult

Las clases que contienen métodos que pueden funcionar de forma asincrónica implementan la interfaz IAsyncResult. Es el tipo de valor devuelto por los métodos que inician una operación asincrónica, como FileStream.BeginRead, y es el tipo del tercer parámetro de los métodos que concluyen una operación asincrónica, como FileStream.EndRead. Los objetos IAsyncResult también se pasan a los métodos invocados por los delegados de AsyncCallback cuando se completa una operación asincrónica.

Un objeto que admite la interfaz IAsyncResult almacena la información de estado de una operación asincrónica y proporciona un objeto de sincronización que permite marcar los subprocesos cuando se completa la operación.

ft8a6455.alert_note(es-es,VS.90).gifNota:

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

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

En el siguiente ejemplo se muestra cómo usar la propiedad AsyncWaitHandle para obtener un objeto WaitHandle y cómo esperar a una llamada asincrónica en un delegado. WaitHandle se marca cuando se completa 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 asincrónicamente y la clase que contiene el método Main que realiza la llamada.

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

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);
}


...


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


Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC, Xbox 360

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0, 1.0

XNA Framework

Compatible con: 2.0, 1.0
Mostrar: