Beispiel #1
0
        private async Task <bool> DeserializeTopSortAsync(Func <PipId, Pip, Task <bool> > handleDeserializedPip, PipRemapReader reader)
        {
            bool successful = true;

            m_totalPipsToDeserialize = reader.ReadInt32();
            var numberOfLayers = reader.ReadInt32();
            int totalPips      = 0;

            for (int layer = 0; layer < numberOfLayers; ++layer)
            {
                var deserializedPips = reader.ReadReadOnlyList((deserializer) => DeserializePipAndPipId(reader));

                totalPips += deserializedPips.Count;

                Task <bool>[] tasks = new Task <bool> [deserializedPips.Count];

                for (int i = 0; i < deserializedPips.Count; i++)
                {
                    var(pip, pipId) = deserializedPips[i];
                    tasks[i]        = HandleAndReportDeserializedPipAsync(handleDeserializedPip, pipId, pip);
                }

                successful &= (await Task.WhenAll(tasks)).All(x => x);
            }

            Contract.Assert(totalPips == m_totalPipsToDeserialize, "Unexpected number of deserialized pips");

            return(successful);
        }