無限のwhileループを実行する必要があり、で実行を開始したいと思いglobal.asax
ます。私の質問は、どのように正確にそれを行うべきかということです。新しいスレッドを開始する必要がありますか、それとも非同期とタスクなどを使用する必要がありますか?whileループ内で行う必要があります await TaskEx.Delay(5000);
他のプロセスをブロックしたり、メモリリークを発生させたりしないようにするには、どうすればよいですか?
VS10、AsyncCTP3、MVC4を使用しています
編集:
public void SignalRConnectionRecovery()
{
while (true)
{
Clients.SetConnectionTimeStamp(DateTime.UtcNow.ToString());
await TaskEx.Delay(5000);
}
}
私がする必要があるのは、アプリケーションが利用可能である限り、これをシングルトンインスタンスとしてグローバルに実行することです。
編集:解決済み
これは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
{
///
}
}
非同期ワーカーの使用方法に関するこの素晴らしい記事を見つけました:http: //www.dotnetfunda.com/articles/article613-background-processes-in-asp-net-web-applications.aspx
そしてこれ: http ://code.msdn.microsoft.com/CSASPNETBackgroundWorker-dda8d7b6
しかし、私のニーズにはこれが完璧だと思います:http: //forums.asp.net/t/1433665.aspx/1