/// <summary> /// 获取Pool预览图 /// </summary> /// <param name="previewInfoList">预览信息列表</param> /// <returns></returns> public static List <PoolPreviewInfo> GetPreviewImage(List <PoolPreviewInfo> previewInfoList) { //按md5首位分类 var md5LookUp = previewInfoList.Select(a => a.file_md5).ToLookup(b => b.Substring(0, 1)); //多线程查询结果集 IEnumerable <KeyValuePair <string, byte[]> > result = new Dictionary <string, byte[]>(); //根据查询图站数量创建线程 Task <Dictionary <string, byte[]> >[] tasks = new Task <Dictionary <string, byte[]> > [md5LookUp.Count]; int x = 0; foreach (var md5Group in md5LookUp) { tasks[x] = new Task <Dictionary <string, byte[]> >(p => { return(GetPreviewImageByGroup((IGrouping <string, string>)p)); }, md5Group); x++; } //开启多线程查询 foreach (var t in tasks) { t.Start(); } Task.WaitAll(tasks); //合并多线程结果集 foreach (var t in tasks) { result = result.Concat(t.Result); } return(PoolPreviewInfo.AddPreview(previewInfoList, result.ToDictionary(k => k.Key, v => v.Value))); }