rufe eine Funktion auf und warte nie darauf in C #

26

Ich habe einen Controller in meiner mvc4-Webanwendung, in dem es eine Aktion gibt, die eine andere Funktion aufrufen muss. Was in dieser Funktion passiert, dh der Rückgabewert ist für meine Aktion nicht wichtig. Wie kann ich diese Funktion aufrufen und nie warten, bis sie ausgeführt wird?

Ich denke, es kann durch async gemacht werden, aber mein Punkt ist es, keine Ressourcen zu verwenden, nur die Funktion aufzurufen und nie darauf zu warten, was jemals passiert.

Bitte geben Sie mir einen Rat.

user2675751
quelle
Sie können dies nur tun, indem Sie es an einen anderen Thread übergeben. Es gibt keine Möglichkeit, eine Funktion ohne Ressourcen aufzurufen, es sei denn, Sie möchten nur, dass es sich um eine No-Op-Funktion handelt.
Robert Harvey
danke, ich meinte, was der beste und optimierte Weg ist, ich denke, der beste Weg ist Task.Run und die Verwendung von WebApi in MVC, basierend auf dem Link @ user814064 erwähnt, vielleicht kann ich nur eine Javascript-Lösung verwenden, aber ich denke, das ist nicht Professionel!
user2675751

Antworten:

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

Beachten Sie, dass das Starten einer Methode ohne Rücksicht auf das Ergebnis oder auf Ausnahmen, die sie auslösen kann, riskant ist.

Wenn eine Ausnahme in a ausgelöst wird Task, wird sie ausgeblendet, bis Sie:

  1. Beobachten Sie das Ergebnis,
  2. Wait() für die Aufgabe oder:
  3. Der GC ruft den Finalizer am auf Task.

Sie können sich 1. und 2. kurz nach dem Aufrufen der Methode selbst behandeln oder eine Fortsetzung anhängen myTask.OnComplete(myErrorHandler, TaskContinuationOptions.OnlyOnFaulted), die ausgeführt werden soll, wenn die ursprüngliche Aufgabe eine Ausnahme auslöst. 3. wird Ihren Prozess zum Absturz bringen; mach das nicht

Arseni Mourzenko
quelle
3
Könnten Sie erweitern auf "3. wird Ihren Prozess zum Absturz bringen; tun Sie das nicht". Wird das nicht automatisch gemacht?
rdans