Alguém poderia me mostrar um pequeno trecho de código que demonstra como chamar um método de forma assíncrona em c #?
fonte
Alguém poderia me mostrar um pequeno trecho de código que demonstra como chamar um método de forma assíncrona em c #?
Se você usar action.BeginInvoke (), terá que chamar EndInvoke em algum lugar - caso contrário, a estrutura terá que manter o resultado da chamada assíncrona no heap, resultando em um vazamento de memória.
Se você não quiser pular para C # 5 com as palavras-chave async / await, você pode apenas usar a biblioteca Task Parallels no .Net 4. É muito, muito mais agradável do que usar BeginInvoke / EndInvoke e oferece uma maneira limpa de disparar e esqueça para trabalhos assíncronos:
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Se você tiver métodos para chamar esses parâmetros, poderá usar um lambda para simplificar a chamada sem ter que criar delegados:
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Tenho certeza (mas não tenho certeza) de que a sintaxe assíncrona / esperar do C # 5 é apenas um açúcar sintático na biblioteca de tarefas.
Começando com .Net 4.5, você pode usar Task.Run para simplesmente iniciar uma ação:
Task.Run vs Task.Factory.StartNew
fonte
Esta é uma maneira de fazer isso:
Claro que você precisa substituir
Action
por outro tipo de delegado se o método tiver uma assinatura diferentefonte
Consulte o artigo do MSDN Assynchronous Programming with Async and Await se você puder se dar ao luxo de brincar com coisas novas. Ele foi adicionado ao .NET 4.5.
Exemplo de snippet de código do link (que é deste projeto de código de amostra do MSDN ):
Citando:
Mais detalhes estão no link .
fonte
fonte