我有一个C#服务,当服务中的计时器触发时,它将执行作业。 计时器每30分钟触发一次。计时器将停止并等待任务完全执行,然后将其打开并再等30分钟。
但是现在,我的服务收到错误日志“等待来自myService服务的事务响应时达到超时(30000毫秒)。”在事件查看器中实际上我的进程是在后台线程中执行的。主线应该可以在30秒内响应控制。
以下是我的代码:
Timer timer = new Timer();
private void InitDownloadServices()
{
timer.AutoReset = false;
timer.Interval = 30000;
timer.Elapsed -= new ElapsedEventHandler(timer_Elapsed);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
try
{
using (System.Threading.SemaphoreSlim concurrencySemaphore = new System.Threading.SemaphoreSlim(5 ))
{
List<Task> _task = new List<Task>();
for(int i=0; i<= 100; i++)
{
Task tsk = Task.Factory.StartNew(() =>
{
concurrencySemaphore.Wait();
try
{
// Long Running process here
}
catch { }
finally { concurrencySemaphore.Release(); }
});
_task.Add(tsk);
}
while (true)
{
bool isRemove = false;
foreach (Task tsk in _task)
{
if (tsk.IsCompleted)
{
isRemove = true;
_task.Remove(tsk);
break;
}
}
if (_task.Count == 0)
{
break;
}
else
{
if (!isRemove)
{
System.Threading.Thread.Sleep(1000);
}
}
}
}
}
catch {}
timer.Enabled=true;
}