public IEnumerable Read()

in TeamCity.CSharpInteractive/MessagesReader.cs [33:66]


    public IEnumerable<IServiceMessage> Read(string indicesFile, string messagesFile)
    {
        using var reader = _fileSystem.OpenReader(messagesFile);
        var position = 0UL;
        foreach (var index in _indicesReader.Read(indicesFile))
        {
            var size = (int)(index - position);
            if (size <= 0)
            {
                _log.Warning($"Corrupted file \"{indicesFile}\", invalid index {index}.");
                break;
            }

            using var owner = _memoryPool.Rent(size);
            var buffer = owner.Memory[..size];
            if (reader.Read(buffer, (long)position) != size)
            {
                _log.Warning($"Corrupted file \"{messagesFile}\", invalid size.");
                break;
            }

            position = index;
            var line = _encoding.GetString(buffer);
            if (string.IsNullOrWhiteSpace(line))
            {
                continue;
            }

            foreach (var message in _serviceMessageParser.ParseServiceMessages(line).Where(message => message != default))
            {
                yield return message;
            }
        }
    }