Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Interfaz IAsyncResult

 

Publicado: octubre de 2016

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

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

[ComVisibleAttribute(true)]
public interface IAsyncResult

NombreDescripción
System_CAPS_pubpropertyAsyncState

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

System_CAPS_pubpropertyAsyncWaitHandle

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

System_CAPS_pubpropertyCompletedSynchronously

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

System_CAPS_pubpropertyIsCompleted

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

El IAsyncResult se implementa mediante clases que contienen métodos que pueden funcionar de forma asincrónica. Es el tipo de valor devuelto de los métodos que inician una operación asincrónica, como FileStream.BeginRead, y se pasa a los 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 delega cuando finaliza una operación asincrónica.

Un objeto que admite el 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ñaliza cuando finaliza la operación.

System_CAPS_noteNota

La AsyncResult clase es la implementación de IAsyncResult devuelta por la BeginInvoke método cuando se utiliza un delegado para llamar a un método de forma asincrónica.

Para obtener una descripción detallada de cómo el IAsyncResult interfaz se utiliza, consulte el Calling Synchronous Methods Asynchronously tema.

En el ejemplo siguiente se muestra cómo utilizar el AsyncWaitHandle propiedad para obtener un WaitHandle, y 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 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 llamadas a métodos de forma asincrónica mediante delegados, vea Calling Synchronous Methods Asynchronously.

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

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: