Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Classe AsyncResult

Encapsula os resultados de uma operação assíncrona em um delegate.

System.Object
  System.Runtime.Remoting.Messaging.AsyncResult

Namespace:  System.Runtime.Remoting.Messaging
Assembly:  mscorlib (em mscorlib.dll)

[ComVisibleAttribute(true)]
public class AsyncResult : IAsyncResult, 
	IMessageSink

O tipo AsyncResult expõe os membros a seguir.

  NomeDescrição
Propriedade públicaAsyncDelegateObtém o objeto delegado, no qual a chamada assíncrona foi invocada.
Propriedade públicaAsyncStateObtém o objeto fornecido como o último parâmetro de um BeginInvoke chamada de método.
Propriedade públicaAsyncWaitHandleObtém um WaitHandle que encapsula os identificadores de sincronização do Win32 e permite a implementação de vários esquemas de sincronização.
Propriedade públicaCompletedSynchronouslyObtém um valor indicando se a BeginInvoke chamada concluída de forma síncrona.
Propriedade públicaEndInvokeCalledObtém ou define um valor indicando se EndInvoke foi chamado na atual AsyncResult.
Propriedade públicaIsCompletedObtém um valor que indica se o servidor concluiu a chamada.
Propriedade públicaNextSinkObtém o coletor de mensagem próximo da cadeia do coletor.
Superior

  NomeDescrição
Método públicoAsyncProcessMessageImplementa a interface IMessageSink.
Método públicoEquals(Object) Verifica se o objeto especificado é igual ao objeto atual. (Herdado de Object.)
Método protegidoFinalize Permite um objeto tentar liberar recursos e executar outras operações de limpeza antes que ele seja recuperado pela coleta de lixo. (Herdado de Object.)
Método públicoGetHashCodeServe como a função de hash padrão. (Herdado de Object.)
Método públicoGetReplyMessageObtém a mensagem de resposta para a chamada assíncrona.
Método públicoGetType Obtém o Type da instância atual. (Herdado de Object.)
Método protegidoMemberwiseCloneCria uma cópia superficial do Object atual. (Herdado de Object.)
Método públicoSetMessageCtrlConjuntos de um IMessageCtrl para a chamada de método remoto atual, que fornece uma maneira para controlar mensagens assíncronas após ter sido despachados.
Método públicoSyncProcessMessageProcessos de forma síncrona uma mensagem de resposta retornada por uma chamada de método em um objeto remoto.
Método públicoToStringRetorna uma string que representa o objeto atual. (Herdado de Object.)
Superior

O AsyncResult classe é usada em conjunto com chamadas de método assíncrono feitas usando delegados. O IAsyncResult retornado a partir do delegado BeginInvoke método pode ser convertido para um AsyncResult. O AsyncResult tem o AsyncDelegate propriedade que mantém o delegado de objeto no qual a chamada assíncrona foi invocada.

Para obter mais informações sobre BeginInvoke e chamadas assíncronas usando delegados, consulte Programação assíncrona usando delegados.

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

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

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


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


.NET Framework

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Quaisquer membros estático (Shared no Visual Basic) públicos deste tipo são thread-safe. Não há garantia de que qualquer membro de instância seja thread-safe.

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2014 Microsoft