Ich suche nach einem allgemeinen Zweck versuchen und versuchen Sie es erneut mit einem Timeout in C#. Grundsätzlich möchte ich folgendes:Allgemeiner Zweck Versuchen Sie und versuchen Sie es erneut mit einem Timeout in C#?
bool stopTrying = false;
DateTime time = DateTime.Now;
while (!stopTrying)
{
try
{
//[Statement to Execute]
}
catch (Exception ex)
{
if (DateTime.Now.Subtract(time).Milliseconds > 10000)
{
stopTrying = true;
throw ex;
}
}
}
Im Fall oben, ich bin für 10 Sekunden warten, aber es sollte eine Variable Timeout basierend auf einem Parameter sein. Ich möchte diesen vollständigen Code nicht überall wiederholen müssen, wo ich ihn brauche. Es gibt mehrere Stellen in meinem Code, wo sie kein Timeout in der API sind und ich werde eine Ausnahme treffen, wenn die Anwendung nicht bereit für die Ausführung der Anweisung ist. Dies würde auch vermeiden, dass Verzögerungen in meiner Anwendung vor dieser Feststellung fest programmiert werden müssen.
Erläuterung: Die fragliche Anweisung könnte etwas wie eine Aufgabe sein. Wenn ich einen Delegaten und method.Invoke verwende, ist nicht die Invokation innerhalb des Delegaten und nicht die ursprüngliche Methode?
Bitte benutzen Sie 'throw ; 'Ausnahmen erneut zu wiederholen, nicht' ex werfen; 'da letzteres den Stac zerstört k Spur. – Will
@Will, ich habe den OP-Code verwendet. Du hast aber recht; 'throw' sollte alleine verwendet werden. Ich werde meine Antwort aktualisieren, um dies zu reflektieren. – strager
Sie vermissen ein stopTrying = true; nach dem Aufruf von "method.Invoke()"; –