chame uma função e nunca espere por ela em c #


26

Eu tenho um controlador no meu aplicativo da web mvc4 no qual há uma ação que precisa chamar outra função. O que acontece nessa função, ou seja, o valor de retorno não é importante para a minha ação. Como posso chamar essa função e nunca esperar que ela seja executada?

Eu acho que isso pode ser feito de forma assíncrona, mas meu objetivo não é usar recursos, basta chamar a função e nunca esperar por isso o que acontece.

Por favor me dê alguns conselhos.



A única maneira de fazer isso é passando para outro thread. Não há como chamar uma função sem recursos, a menos que você queira que ela não funcione.
Robert Harvey

Obrigado, eu quis dizer qual é a melhor e otimizada maneira, acho que a melhor maneira é Task.Run e usando WebApi no MVC, com base no link @ user814064 mencionado, talvez eu possa apenas usar uma solução javascript, mas acho que não é profissional!
user2675751

Respostas:


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();
}

Observe que iniciar um método sem se preocupar com o resultado ou com as exceções que ele gera é arriscado.

Se uma exceção for lançada em a Task, ela ficará oculta até que você:

  1. Observe o resultado,
  2. Wait() para a tarefa ou:
  3. O GC chama o finalizador no Task.

Você pode se controlar 1. e 2. logo após chamar o método, ou pode anexar uma continuação myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted)para ser executada quando a tarefa original gerar uma exceção. 3. travará seu processo; não faça isso.


3
Você poderia expandir o "3. travará seu processo; não faça isso". Isso não é feito automaticamente?
Rdans
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.