private CachedGraphLoader(CancellationToken cancellationToken, EngineSerializer serializer) { Serializer = serializer; m_pipGraphIdTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.PipGraph, async reader => { var graphId = await PipGraph.DeserializeGraphIdAsync(reader); return(graphId.Item1); }); var directedGraphTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.DirectedGraph, DeserializedDirectedGraph.DeserializeAsync); m_stringTableTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.StringTable, StringTable.DeserializeAsync); m_pathTableTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.PathTable, reader => reader.ReadPathTableAsync(m_stringTableTask.Value)); m_symbolTableTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.SymbolTable, reader => reader.ReadSymbolTableAsync(m_stringTableTask.Value)); m_qualifierTableTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.QualifierTable, reader => reader.ReadQualifierTableAsync(m_stringTableTask.Value)); m_pipTableTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.PipTable, (reader) => PipTable.DeserializeAsync( reader, m_pathTableTask.Value, m_symbolTableTask.Value, EngineSchedule.PipTableInitialBufferSize, EngineSchedule.PipTableMaxDegreeOfParallelismDuringConstruction, debug: false)); m_mountPathExpanderTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.MountPathExpander, reader => MountPathExpander.DeserializeAsync(reader, m_pathTableTask.Value)); m_pipExecutionContextTask = CreateAsyncLazy(() => Task.Run( async() => { var stringTable = await m_stringTableTask.Value; var pathTable = await m_pathTableTask.Value; var symbolTable = await m_symbolTableTask.Value; var qualifierTable = await m_qualifierTableTask.Value; if (stringTable != null && pathTable != null && symbolTable != null && qualifierTable != null) { return((PipExecutionContext) new SchedulerContext(cancellationToken, stringTable, pathTable, symbolTable, qualifierTable)); } return(null); })); m_historicDataTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.HistoricTableSizes, reader => Task.FromResult(HistoricTableSizes.Deserialize(reader))); m_pipGraphTask = CreateLazyFileDeserialization( serializer, GraphCacheFile.PipGraph, reader => PipGraph.DeserializeAsync( reader, serializer.LoggingContext, m_pipTableTask.Value, directedGraphTask.Value, m_pipExecutionContextTask.Value, ToSemanticPathExpander(m_mountPathExpanderTask.Value))); m_cachedGraphTask = CreateAsyncLazy(() => CreateCachedGraph(m_pipTableTask.Value, m_pipGraphTask.Value, directedGraphTask.Value, m_pipExecutionContextTask.Value, m_mountPathExpanderTask.Value)); }