import * as cornerstone from 'cornerstone-core' var taskPool = [] // 请求池 let numRequest = 0 // 正在执行数量 const maxRequest = 6 // 可配置 let taskTimer // 轮询的定时器 var cachedTask = {} // 存放的任务数据 // 执行下载 async function executeTask() { if (taskPool.length > 0) { sortTaskPool() var taskPromises = [] for (let i = 0; i < maxRequest; i++) { const task = taskPool.shift() if (!task) return taskPromises.push((task.execute)) } await Promise.all(taskPromises.map(task=>task())); executeTask() // await new Promise(resolve => setTimeout(resolve, delay)); // const taskPromises = []; // const delay = 50 // for(let i = 0;i< taskPool.length; i++ ){ // taskPromises.push(()=>cornerstone.loadAndCacheImage(taskPool[i].key)) // } // for (let i = 0; i < taskPromises.length; i += maxRequest) { // const tasks = taskPromises.slice(i, i + maxRequest); // await Promise.all(tasks.map(task=>task())); // await new Promise(resolve => setTimeout(resolve, delay)); // } // while (taskPool.length > 0) { // var requestNum = taskPool.length > maxRequest ? maxRequest : taskPool.length // for (let i = 0; i < requestNum; i++) { // sortTaskPool() // const task = taskPool.shift() // if (!task) return // batchPromises.push(cornerstone.loadAndCacheImage(task.key)) // } // await Promise.all(batchPromises); // } }else{ startTaskTimer() } } function sortTaskPool() { if (taskPool.length > 0) { taskPool.sort((a, b) => b.priority-a.priority ) } } // 轮询检查请求池中是否有请求需要执行 function startTaskTimer() { // if(taskTimer){ // clearInterval(taskTimer) // taskTimer = null // } // taskTimer = setInterval(() => { // if (taskPool.length > 0) { // stopTaskTimer() // executeTask() // }else{ // return // } // }, 50) taskTimer = setInterval(() => { if (taskPool.length > 0) { stopTaskTimer() executeTask() } }, 50) } // 停止轮询 function stopTaskTimer() { clearInterval(taskTimer) taskTimer = null } function loadAndCacheImagePlus(imageId,seriesId, priority) { return new Promise((resolve, reject) => { const imageLoadObject = cornerstone.imageCache.getImageLoadObject(imageId) if (imageLoadObject) { imageLoadObject.promise.then((image) => { resolve(image) }, (err) => { reject(err) }) } else { const imageTask = buildImageRequestTask(imageId,seriesId, { priority }) // addTaskIntoPool(imageTask).then((res) => { // resolve(res) // }).catch(e => { // reject(e) // }) taskPool.push(imageTask) } }) } // 预加载池的添加 function addTaskIntoPool(task) { taskPool.push(task) } function removeTask(seriesId){ stopTaskTimer() if (taskPool.length > 0) { for(var i =taskPool.length-1; i>=0;i--){ if(taskPool[i] && taskPool[i].seriesId === seriesId){ delete cachedTask[taskPool[i].key] taskPool.splice(i,1) } } } startTaskTimer() } function resetRequestPool(){ taskPool = [] pendingList =[] cachedTask = {} } function resetCachedTask(){ taskPool = [] pendingList =[] cachedTask = {} } function buildImageRequestTask(imageId,seriesId, config = {}) { return { key: imageId, seriesId:seriesId, ...config, execute: () => { return cornerstone.loadAndCacheImage(imageId) } }; } export default { addTaskIntoPool, executeTask, startTaskTimer, stopTaskTimer, loadAndCacheImagePlus, removeTask, resetRequestPool, resetCachedTask }