asp.netアプリケーションからバックグラウンドで実行中のスレッドが必要です。 ところで、メソッドは外部データソース期間から何かを取得し、例外が発生する可能性があります。私はこのタスクをフルフィルするいくつかの方法を提供しています。私はスレッドを永遠に実行し続ける必要があります。どちらの方法が最適ですか?
Way1 =例外が発生したときのループ。
static void LongRunningMethod()
{
do
{
try
{
//fetch something from external period and maybe exception happens.
Thread.sleep(100000);
}
catch(Exception ex)
{
//log exception..
}
} while (true);
}
ウェイ2 =タイマーのようなもので、次の方法期間を実行すると、例外が発生したときに、新しいスレッドを開きます。
static void LongRunningMethod()
{
try
{
//fetch something from external period and maybe exception happens.
Thread.sleep(100000);
}
catch(Exception ex)
{
//log exception..
Thread T2 = new Thread(LongRunningMethod);
T2.Start();
}
}
Way3 =例外が発生したときにそれ自身を呼び出します。 - 奇妙な間隔のため申し訳ありません - 私は、コードウィンドウでこれを直接編集し
static BackgroundWorker looper = new BackgroundWorker();
static bool isRunning = true;//you can set this to false when closing
public static void initialize(){
looper.DoWork+= doLoop;
looper.RunRunWorkerAsync();
}
private static void doLoop(object sender, DoWorkEventArgs e){
while(isRunning){
//do looping code
System.Threading.Thread.Sleep(5000);
if(!isRunning)
break;
}
}
PS:
static void LongRunningMethod()
{
try
{
//fetch something from external period and maybe exception happens.
Thread.sleep(100000);
}
catch(Exception ex)
{
//log exception..
LongRunningMethod();
}
}
タスクを実行するには、Async-AwaitまたはBackGroundWorker、またはその両方を使用する必要があります。あなたはそれについてもっと知るために両方の用語をGoogleに入れることができます。 –
電気代を請求し、コンピュータの電源コードを抜かないでください。 – siride
Ways 2&3では、最終的にスタックのオーバーフローが発生します。 – SledgeHammer