public void StartNew(DownloadFilePart downloadFilePart) { Thread workerThread = new Thread(() => { Download(downloadFilePart); _workingThreads.TryDequeue(out Thread thread); }); workerThread.Start(); _workingThreads.Enqueue(workerThread); }
private void Download(DownloadFilePart downloadFilePart) { while (_partQueue.TryDequeue(out int partNumber)) { int offset = partNumber * PartLength; try { byte[] data = downloadFilePart(offset, PartLength); FilePartDownloadedEvent(partNumber, data); } catch (Exception e) { ExceptionEvent(e); } } }