web-dev-qa-db-fra.com

appeler une fonction et ne jamais l'attendre en C #

J'ai un contrôleur dans mon application Web mvc4 dans lequel il y a une action qui doit appeler une autre fonction. Ce qui se passe dans cette fonction, c'est-à-dire que la valeur de retour n'est pas importante pour mon action. Comment puis-je appeler cette fonction et ne jamais attendre qu'elle soit exécutée?

Je pense que cela peut être fait par async mais mon but n'est pas d'utiliser les ressources, il suffit d'appeler la fonction et de ne jamais l'attendre.

Veuillez me donner quelques conseils.

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

Notez que démarrer une méthode sans se soucier du résultat ou des exceptions qu'elle peut lancer est risqué.

Si une exception est levée dans un Task, elle sera masquée jusqu'à ce que vous:

  1. Observez le résultat,
  2. Wait() pour la tâche, ou:
  3. Le GC appelle le finaliseur sur le Task.

Vous pouvez vous gérer 1. et 2. peu de temps après avoir appelé la méthode, ou vous pouvez attacher une continuation avec myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted) à exécuter lorsque la tâche d'origine lève une exception. 3. plantera votre processus; ne fais pas ça.

40
Arseni Mourzenko