private void StoreBatch(BacthedPrintRequestDto request)
        {
            var isTheFirstRequest = PrintRequestsCache.AddBatch(request);

            if (!isTheFirstRequest)
            {
                return;
            }

            Task.Delay(TimeSpan.FromSeconds(AcceptBatchesTimeoutSeconds * 2))
            .ContinueWith(t => PrintRequestsCache.RemoveRequestInProgress(request.PrintId));
        }
        private PrintRequest CreateAggregatedRequest(string printId)
        {
            var printRequest = PrintRequestsCache.GetPrintRequestInProgress(printId);
            var startTime    = DateTime.Now;

            while (printRequest.HasMissingBatches())
            {
                if ((DateTime.Now - startTime).TotalSeconds >= AcceptBatchesTimeoutSeconds)
                {
                    throw new ForbiddenException("Accept batches timeout");
                }
                Thread.Sleep(100);
            }
            return(printRequest);
        }
예제 #3
0
        public void Print(string printerName, byte[] document, string id)
        {
            var filePath = StoreFile(document, id);

            new Thread(() => {
                try
                {
                    Print(printerName, filePath);
                }
                finally
                {
                    RemoveFile(filePath);
                    PrintRequestsCache.RemoveRequestInProgress(id);
                }
            }).Start();
        }