¿Podría alguien mostrarme un pequeño fragmento de código que demuestre cómo llamar a un método de forma asincrónica en c #?
fuente
¿Podría alguien mostrarme un pequeño fragmento de código que demuestre cómo llamar a un método de forma asincrónica en c #?
Si usa action.BeginInvoke (), debe llamar a EndInvoke en algún lugar; de lo contrario, el marco debe contener el resultado de la llamada asíncrona en el montón, lo que da como resultado una pérdida de memoria.
Si no desea saltar a C # 5 con las palabras clave async / await, puede usar la biblioteca Task Parallels en .Net 4. Es mucho, mucho mejor que usar BeginInvoke / EndInvoke, y ofrece una forma limpia de disparar- y olvídate de los trabajos asincrónicos:
using System.Threading.Tasks;
...
void Foo(){}
...
new Task(Foo).Start();
Si tiene métodos para llamar que toman parámetros, puede usar una lambda para simplificar la llamada sin tener que crear delegados:
void Foo2(int x, string y)
{
return;
}
...
new Task(() => { Foo2(42, "life, the universe, and everything");}).Start();
Estoy bastante seguro (pero admito que no es positivo) de que la sintaxis async / await de C # 5 es simplemente azúcar sintáctica alrededor de la biblioteca de tareas.
A partir de .Net 4.5, puede usar Task.Run para simplemente iniciar una acción:
Task.Run vs Task.Factory.StartNew
fuente
He aquí una forma de hacerlo:
Por supuesto, debe reemplazarlo
Action
por otro tipo de delegado si el método tiene una firma diferentefuente
Consulte el artículo de MSDN Programación asincrónica con Async y Await si puede permitirse jugar con cosas nuevas. Se agregó a .NET 4.5.
Fragmento de código de ejemplo del enlace (que es en sí mismo de este proyecto de código de muestra de MSDN ):
Citando:
Más detalles están en el enlace .
fuente
fuente