IEnumerable <BlobObject> EnumerateChunksReadObjectsSync(BlobSystem blobSystem, bool throwOnUnhandledChunk, IList <KeyValuePair <BlobChunkHeader, byte[]> > chunks) { var results = new List <BlobObject>(chunks.Count); foreach (var kv in chunks) { var header = kv.Key; BlobGroup blob_group; BlobGroupVersionAndBuildInfo info_for_version; if (blobSystem.TryGetBlobGroup(header.Signature, header.DataSize, header.Version, out blob_group, out info_for_version)) { if (!info_for_version.BuildHandle.IsWithinSameBranch(GameTarget.Build)) { EnumerateChunksReadObjectFoundBuildIncompatibility(blobSystem, header, blob_group, info_for_version.BuildHandle, GameTarget.Build); } var obj = EnumerateChunksReadObject(blobSystem, blob_group, info_for_version, header, kv.Value); results.Add(obj); } else { EnumerateChunksReadObjectFoundUnknownChunk(blobSystem, header, throwOnUnhandledChunk); } } return(results); }
Task <BlobObject>[] EnumerateChunksReadObjectsAsync(BlobSystem blobSystem, bool throwOnUnhandledChunk, IList <KeyValuePair <BlobChunkHeader, byte[]> > chunks) { var task_list = new List <Task <BlobObject> >(chunks.Count); foreach (var kv in chunks) { var header = kv.Key; BlobGroup blob_group; BlobGroupVersionAndBuildInfo info_for_version; if (blobSystem.TryGetBlobGroup(header.Signature, header.DataSize, header.Version, out blob_group, out info_for_version)) { if (!info_for_version.BuildHandle.IsWithinSameBranch(GameTarget.Build)) { EnumerateChunksReadObjectFoundBuildIncompatibility(blobSystem, header, blob_group, info_for_version.BuildHandle, GameTarget.Build); } var task = Task <BlobObject> .Factory.StartNew(s => (s as BlobTransportStream).EnumerateChunksReadObject(blobSystem, blob_group, info_for_version, header, kv.Value), this); task_list.Add(task); } else { EnumerateChunksReadObjectFoundUnknownChunk(blobSystem, header, throwOnUnhandledChunk); } } return(task_list.ToArray()); }