Implementieren Sie korrekt Hintergrundprozess Thread in ASP.NET
Ich muss eine Endlosschleife ausführen und möchte die Ausführung in startenglobal.asax
. Meine Frage ist, wie genau soll ich das machen? Soll ich einen neuen Thread starten oder Async und Task oder etwas anderes verwenden? Innerhalb der while-Schleife muss ich tunawait TaskEx.Delay(5000);
Wie mache ich das, damit keine anderen Prozesse blockiert werden und keine Speicherlecks entstehen?
Ich benutze VS10, AsyncCTP3, MVC4
BEARBEITEN:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
Alles, was ich tun muss, ist, dies als Singleton-Instanz global auszuführen, solange eine Anwendung verfügbar ist.
EDIT: Gelöst
Dies ist die endgültige Lösung in Global.asax
protected void Application_Start()
{
Thread signalRConnectionRecovery = new Thread(SignalRConnectionRecovery);
signalRConnectionRecovery.IsBackground = true;
signalRConnectionRecovery.Start();
Application["SignalRConnectionRecovery"] = signalRConnectionRecovery;
}
protected void Application_End()
{
try
{
Thread signalRConnectionRecovery = (Thread)Application["SignalRConnectionRecovery"];
if (signalRConnectionRecovery != null && signalRConnectionRecovery.IsAlive)
{
signalRConnectionRecovery.Abort();
}
}
catch
{
///
}
}
Ich habe diesen schönen Artikel über die Verwendung von Async Worker gefunden:http://www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
Und das:http://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
Aber ich denke für meine Bedürfnisse wird dieser perfekt sein:http://forums.asp.net/t/1433665.aspx/1