この質問は 2 つの部分に分かれています。複数のサーバーから情報を取得し、この情報を DB に保存するコンソール アプリケーションがあります。これを同時に実行できるようにするために、スレッドを使用しました。この実行を毎分自動化しようとしています。
stackoverflow を検索すると、これが機能することがわかりました。
var timer = new System.Threading.Timer((e) =>
{
var models = ServerHandler.GetServerModels();
foreach (var m in models)
{
ServerHandler.MakeThreads(m);
}
Console.WriteLine("Running...");
Console.WriteLine("Press 'X' to exit or close the window, i : " + i);
i++;
}, null, 0, TimeSpan.FromMinutes(1).Seconds);
ただし、これは期待どおりに機能せず、1 回しか実行されません。たとえば、これに変更した場合:
TimeSpan.FromMinutes(0.5).Seconds
または:
TimeSpan.FromSeconds(30).Seconds
その後、動作します。私は何を間違っていますか?
この質問の後半:
上で示したようにこれが実際に機能すると、別のことが起こります。プロセスは継続的に実行され、474 スレッドの後にクラッシュし、システムのメモリが不足していると表示されます。
これにスレッドスリープを使用してみましたが、一度実行すると実行が停止します。
役立つ場合は、これを含めます。
public static void MakeThreads(ServerModel model)
{
Thread thread = new Thread(() => SaveServerInfo(model));
thread.Start();
//Thread.Sleep(1);
//thread.Join();
}
どうすればこれを機能させることができますか?