等待来自myService服务的事务响应时达到超时(30000毫秒)

时间:2016-09-29 02:22:02

标签: c# multithreading service

我有一个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;
} 

0 个答案:

没有答案