Ein Kollege von mir schrieb einen Code, der im Wesentlichen für eine Sekunde pausiert, bevor er einen Webservice-Aufruf tätigt, um den Status eines Werts zu überprüfen. Dieser Code wird in eine Controlleraktion einer MVC 4-Anwendung geschrieben. Die Aktion selbst ist nicht asynchron.Anhalten innerhalb einer MVC-Controlleraktion
var end = DateTime.Now.AddSeconds(25);
var tLocation = genHelper.GetLocation(tid);
while (!tLocation.IsFinished && DateTime.Compare(end, DateTime.Now) > 0)
{
var t = DateTime.Now.AddSeconds(1);
while (DateTime.Compare(t, DateTime.Now) > 0) continue;
// Make the webservice call so we can update the object which we are checking the status on
tLocation = genHelper.GetLocation(tid);
}
Es scheint aus irgendeinem Grund zu arbeiten, aber ich habe einige Bedenken darüber Umsetzung ist. Gibt es einen besseren Weg, diese Verzögerung zu machen?
HINWEIS:
- Wir nicht .NET 4.5 verwenden und wird diese nicht
- Javascript Scrip Optionen wie SignalR in dieser Lösung ändern sind keine Option derzeit
Ich hatte dachte, die Frage sei eine gute Option, aber er nahm es nicht auf und sagte, es sei nicht erforderlich, was er getan habe.
How to put a task to sleep (or delay) in C# 4.0?
Ich würde Ajax wechseln die Website statt Blockieren des Thread auf dem Server 25 Sekunden abfragen ... – Timmerz
Ja, werde ich diesen Dank empfehlen aber die Zeit könnte der Decider auf dieses. Prost – dreza
Wahrscheinlich mit .Net 4.5 schon, aber ich würde immer noch erwähnen, was das Risiko von diesem und Thread.Sleep ist. Beide blockieren einen Thread für einen Zeitraum, während dessen der Thread nichts tut, aber er kann auch nicht zugewiesen werden, um eine andere Anfrage zu bedienen. Dies führt zu einem Blockieren von HTTP-Anfragen, da keine Threads verfügbar sind. Wenn dieser Punkt kommt, hängt von vielen - vielen Faktoren ab, und die Anzahl der gleichzeitigen Benutzer ist nur eine von ihnen, z. Eine Site mit vielen Ajax-Anfragen pro Benutzeraktionen wird ohne Threads mit weniger gleichzeitigen Benutzern auskommen. Blockiere also keine Threads, besonders auf einem Webserver. – user3285954