Wie kann ich die Ausführung einer Methode abbrechen, wenn ihre Ausführung zu lange dauert?
z.B..
string foo = DoSomethingComplex();
aber wenn DoSomethingComplex()
zu lange dauert (sagen wir 20 Sekunden). dann setzen Sie foo einfach auf "";
Wie kann ich die Ausführung einer Methode abbrechen, wenn ihre Ausführung zu lange dauert?
z.B..
string foo = DoSomethingComplex();
aber wenn DoSomethingComplex()
zu lange dauert (sagen wir 20 Sekunden). dann setzen Sie foo einfach auf "";
Sie können dann einen neuen Thread erstellen, in dem Ihre Methode ausgeführt wird:
thread.Start();
bool success = thread.Join(20000);
Join gibt true zurück, wenn der Thread vor der angegebenen Zeit erfolgreich beendet wurde. Offensichtlich wird die Methode nicht abgebrochen (wahrscheinlich gibt es keine Möglichkeit, die dass direkt), sondern den Faden - aber es scheint, dass dies das Gewünschte erreichen würde.
Ein einfaches Beispiel für einen Threading-Code würde wahrscheinlich wie folgt aussehen. Beachten Sie, dass ich einige Annahmen über Signatur mit Parameter, all dies in einer Klasse, etc. Für Methode:
public string DoSomethingComplex(int param)
und dann in der gleichen Klasse:
public delegate void Callback(string newFoo);
public void ThreadedDoSomethingComplexEnded(string newFoo)
{
foo = newFoo;
}
private static void ThreadedDoSomethingComplex(ClassFooIsIn fooObject, int param, Callback callback)
{
var newFoo = fooObject.DoSomethingComplex(param);
callback(newFoo);
}
Verwendung aka Code in einer anderen Methode in ClassFooIsIn:
var thread = new Thread(() => ThreadedDoSomethingComplex(this, param, ThreadedDoSomethingComplexEnded));
thread.Start();
if (!thread.Join(20000))
{
foo = "";
}
Foo sollte vor der oben gezeigten Verwendung initialisiert werden, so dass man in Wirklichkeit die Zeile foo = ""; überspringen könnte.
Erstellen Sie einen separaten Thread für DoSomethingComplex und warten Sie auf den Abschluss des Vorgangs im Hauptthread:
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.