Я создал службу Windows в C #, и в этой службе я создал 4 потока и запускаю их в фоновом режиме каждые 10 секунд.
Ниже приведен код:
var ThreadSize = 4;
for (int i = 0; i < ThreadSize; i++)
{
Task.Run(async () =>
{
while (1 == 1)
{
try
{
//Logic
await Task.Delay(10000, cancelSource.Token);
}
catch (Exception ex)
{
//Log the exception
}
}
});
}
Цикл for будет выполнен только один раз и создаст 4 потока. Я использую Task.Delay для ожидания потока в течение 10 секунд, а затем снова выполняю мою логику. Он будет выполнять мою логику каждые 10 секунд.
Код работает нормально, но через некоторое время все мои потоки завершаются (не работает). Я имею в виду, что код в логике не работает после пары часов.
Там нет исключений на всех.
Может кто-нибудь предположил, что пошло не так.
Заранее спасибо.
Отредактированный код:
CancellationTokenSource cancelSource;
protected override void OnStart(string[] args)
{
cancelSource = new CancellationTokenSource();
Process.StartProcess(cancelSource);
}
protected override void OnStop()
{
cancelSource.Cancel();
}
public static void StartProcess(CancellationTokenSource cancelSource)
{
var ThreadSize = 4;
for (int i = 0; i < ThreadSize; i++)
{
Task.Run(async () =>
{
while (1 == 1)
{
try
{
//Logic
await Task.Delay(10000, cancelSource.Token);
}
catch (Exception ex)
{
//Log the exception
}
}
});
}
}