3 Stimmen

Zeitliche Begrenzung eines Vorgangs einrichten

Ich habe eine (möglicherweise) langwierige Operation a dem ich eine zeitliche Begrenzung auferlegen möchte t (in Millisekunden). Wenn der Vorgang a dauert weniger als t Millisekunden zu beenden, dann gebe ich die Antwort von Operation a Ich möchte, dass der Vorgang abgebrochen wird und ein entsprechender Fehlercode zurückgegeben wird, der besagt, dass die Zeitbeschränkung überschritten wurde.

Wie kann ich dies in C# bewerkstelligen? Wenn Sie andere Ideen haben, die sprachenunabhängig sind, können Sie diese gerne mitteilen?

5voto

Aliostad Punkte 78595

Am besten wickeln Sie es in ein Task<T> o Task und verwenden Wait .

Siehe aquí .

Task t = new Task(DoStuff());
t.Wait(1000);

2voto

tobias86 Punkte 4869

Sie könnten zwei Threads eröffnen: Einen für die Operation "a" und einen anderen mit einem Timer.

Wenn der Timer-Thread beendet wird, prüft er, ob der Operation-"a"-Thread beendet ist. Wenn nicht, bricht er den (noch laufenden) Thread ab und gibt den Timeout-Fehlercode zurück.

Wenn Operation "a" vor dem Timer-Thread beendet wird, beenden Sie einfach den Timer-Thread, bevor Sie Ihr Ergebnis zurückgeben.

0voto

Sjoerd Punkte 71416

Verwenden Sie BeginInvoke für die Methode, und prüfen Sie nach einiger Zeit IAsyncResult.IsCompleted. Wenn sie abgeschlossen ist, erhalten Sie das Ergebnis mit EndInvoke.

0voto

trickdev Punkte 617

Es gibt bereits einiges Material dazu, siehe Implementieren von C# Generic Timeout

Das allgemeine Thema ist ein asynchroner Thread (Delegate, Task usw.), um die Zeit im Auge zu behalten. Seien Sie sehr vorsichtig mit Thread.Abort(), sollten Sie die Aufgabe laufen lassen, wenn Sie können, oder verwenden Sie eine Art von sauberen Abbruch.

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