protected sealed override async Task <bool> DoAssessmentAsync()
        {
            if (CodeRunner == null)
            {
                throw new InvalidOperationException("Attempt to run assessment without a code runner");
            }
            if (CompiledCode == null || CompiledCode.HasValue == false)
            {
                throw new InvalidOperationException("Attempt to run assessment without any compiled code");
            }

            StringBuilder console = new StringBuilder();

            void OnConsoleWrite(object sender, ConsoleWriteEventArgs e)
            {
                if (ShowScriptRunning)
                {
                    WriteToConsole(e.Message);
                }
                console.Append(e.Message);
            }

            CodeRunner.ConsoleWrite += OnConsoleWrite;
            try
            {
                await CodeRunner.RunAsync(CompiledCode.Value, new PreProgrammedTextReader(ConsoleInText));
            }
            finally
            {
                CodeRunner.ConsoleWrite -= OnConsoleWrite;
            }

            return(CheckResult(console.ToString()));
        }