3 Stimmen

Rückgabewert der Funktion und Start einer Aufgabe

Ist es möglich, eine Funktion wie diese zu haben

public string Foo()
{
    Task.Factory.StartNew(Foo2());
    return "computedUniqueId";
}

Die Sache ist, dass ich diese Foo2 Aufgabe starten möchte, NACHDEM Foo einen Wert zurückgibt. Der Grund für diese Frage ist, dass der Aufrufer der Funktion Foo() auf Informationen mit der "computedUniqueId" wartet. Foo2() wird diese Information auslösen, so dass es eine Situation geben könnte, in der der Zuhörer nicht weiß, worauf er warten soll und diese Nachricht verpasst. Also zusammenfassend: Gibt es etwas (wie continueWith), das sicherstellt, dass Foo() seinen Wert zurückgibt, bevor Foo2() einsetzt?

1voto

kmarks2 Punkte 4517

Das ist nicht möglich, weil return ist das letzte, was in dieser Methode geschieht. Nach einer return hat die betreffende Methode die Kontrolle und den Anwendungsbereich wieder an den Aufrufer zurückgegeben. Punkt. Das Beste, was mir einfällt, ist, wenn Sie Foo2 von dem Ort aus aufrufen, an den die Zeichenfolge "computerUniqueId" zurückgegeben wird.

Wenn Sie uns mehr Einzelheiten mitteilen, können wir Ihnen vielleicht weiterhelfen. Danke!

0voto

Reed Copsey Punkte 536986

Gibt es etwas (wie continueWith), die behaupten, dass Foo() seinen Wert zurückgibt, bevor Foo2() eintritt?

Nein. Das Problem ist, dass man die Hörseite der Gleichung nicht kontrollieren kann. Wenn es für den Zuhörer wichtig ist, die eindeutige ID im Voraus zu kennen, würde ich dies in zwei Teile aufteilen und die eindeutige Kennung an die Aufgabe selbst übergeben:

public string GenerateFooId()
{ 
    return "computedUniqueId";
}
public void Foo(string id)
{
    Task.Factory.StartNew(Foo2(id));
}

Auf diese Weise können Sie immer sicherstellen, dass der Aufrufer die ID kennt, bevor er die Aufgabe startet (da der Aufrufer die ID korrekt angeben muss). Wenn Sie die ID zu einem benutzerdefinierten Typ machen, erhalten Sie mehr Sicherheit und Kontrolle, da Sie alles andere verhindern können als GenerateFooId diese ID nicht generieren können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X