private static int GetMaxNumberTask(AsyncHttpServerOptions options)
        {
            var rpsForProcessor = 1000 / options.AverageRequestProcessingTime;
            var requestProcessingProcessorCount = Environment.ProcessorCount - 1;

            return((int)(rpsForProcessor * requestProcessingProcessorCount
                         * options.ServerLoadInPercent));
        }
        public AsyncHttpServer(AsyncHttpServerOptions options,
                               List <IRouter> routers)
        {
            listener     = new HttpListener();
            this.routers = routers;

            maxNumberTaskPending    = GetMaxNumberTask(options);
            timeoutMinusAverageTime = options.RequestTimeout -
                                      options.AverageRequestProcessingTime;

            if (timeoutMinusAverageTime < 0)
            {
                throw new ArgumentException(nameof(options));
            }

            logger = LogManager.GetCurrentClassLogger();
        }