llamar a una función y nunca esperarla en C #


26

Tengo un controlador en mi aplicación web mvc4 en el que hay una acción que necesita llamar a otra función. Lo que sucede en esa función, es decir, el valor de retorno no es importante para mi acción. ¿Cómo puedo llamar a esa función y nunca esperar a que se ejecute?

Creo que se puede hacer de forma asincrónica, pero mi objetivo es no usar recursos, simplemente llamar a la función y nunca esperar a que pase lo que pase.

Por favor dame un consejo.



La única forma de hacerlo es pasándolo a otro hilo. No existe tal cosa como llamar a una función sin recursos, a menos que solo desee que sea un no-op.
Robert Harvey

gracias, quise decir cuál es la mejor manera y optimizada, creo que la mejor manera es Task.Run y ​​usando WebApi en MVC, basado en el enlace @ user814064 mencionado, tal vez solo pueda usar una solución de JavaScript, pero creo que eso no es ¡profesional!
user2675751

Respuestas:


40
private void Demo()
{
    // Do something, given that the result doesn't matter.
}

public void Do()
{
    Task.Factory.StartNew(this.Demo);

    // The following line will be executed without waiting for the result.
    DoSomethingElse();
}

Tenga en cuenta que iniciar un método sin preocuparse por el resultado o por las excepciones que puede generar es arriesgado.

Si se lanza una excepción en un Task, se ocultará hasta que usted:

  1. Observa el resultado,
  2. Wait() para la tarea, o:
  3. El GC llama al finalizador en el Task.

Puede manejar usted mismo 1. y 2. poco después de llamar al método, o puede adjuntar una continuación myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)para que se ejecute cuando la tarea original arroje una excepción. 3. bloqueará su proceso; no hagas eso


3
¿Podría ampliar en "3. bloqueará su proceso; no lo haga" ¿No se hace esto automáticamente?
Rdans
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.