示例#1
0
        private async Task schedule()
        {
            Task continueTask = null;

            if (Interlocked.CompareExchange(ref isHandling, 1, 0) == 1)
            {
                return;
            }

            try
            {
                if (await handler.ProcessData(this))
                {
                    if (buffer.Count > 0)
                    {
                        processCount++;
                        continueTask = new Task(async() => await schedule());
                    }
                    else
                    {
                        processCount = 0;
                    }

                    if (processCount > 100)
                    {
                        throw new Exception("max process count in handler");
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log("from schedule: " + ex.Message);
                Console.WriteLine("from schedule: " + ex.Message);
                continueTask = null;
                closeConnection();
            }
            finally
            {
                Interlocked.Decrement(ref isHandling);
                if (continueTask != null)
                {
                    continueTask.Start();
                }
            }
        }