void TrySetResult(ParseResult parseResult) {

            // Der Puffer wurde zwischenzeitlich schon wieder geändert. Dieses Ergebnis brauchen wir nicht,
            // da bereits ein neues berechnet wird.
            if (TextBuffer.CurrentSnapshot != parseResult.Snapshot) {
                if (!WaitingForAnalysis) {
                    // Dieser Fall sollte eigentlich nicht eintreten, denn es muss bereits eine neue Berechnung angetriggert worden sein
                    Invalidate();
                }
                return;
            }

            _parseResult = parseResult;

            var snapshotSpan = parseResult.Snapshot.ToSnapshotSpan();
            OnParseResultChanged(new SnapshotSpanEventArgs(snapshotSpan));
        }
         static async Task<SemanticModelResult> BuildResultAsync(ParseResult parseResult, CancellationToken cancellationToken) {
            return await Task.Run(() => {
                
                if(parseResult == null) {
                    return null;
                }

                var syntaxTree = parseResult.SyntaxTree;
                var snapshot   = parseResult.Snapshot;

                var compilationUnitSyntax = syntaxTree.GetRoot() as CompilationUnitSyntax;
                if(compilationUnitSyntax == null) {
                    return null;
                }

                var compilationUnit = CompilationUnit.FromCompilationUnitSyntax(compilationUnitSyntax, cancellationToken);

                return new SemanticModelResult(compilationUnit, snapshot);

            }, cancellationToken).ConfigureAwait(false);
        }
         static async Task<SemanticModelResult> BuildResultAsync(ParseResult parseResult, CancellationToken cancellationToken) {
            return await Task.Run(() => {

                using(Logger.LogBlock(nameof(BuildResultAsync))) {

                    if(parseResult == null) {
                        Logger.Debug("Es gibt kein ParesResult. Der Vorgang wird abgebrochen.");
                        return null;
                    }

                    var syntaxTree = parseResult.SyntaxTree;
                    var snapshot = parseResult.Snapshot;

                    var codeGenerationUnitSyntax = syntaxTree.GetRoot() as CodeGenerationUnitSyntax;
                    if(codeGenerationUnitSyntax == null) {
                        Logger.Debug($"Der SyntaxRoot ist nicht vom Typ {typeof(CodeGenerationUnitSyntax)}. Der Vorgang wird abgebrochen.");
                        return null;
                    }

                    var codeGenerationUnit = CodeGenerationUnit.FromCodeGenerationUnitSyntax(codeGenerationUnitSyntax, cancellationToken);

                    return new SemanticModelResult(codeGenerationUnit, snapshot);
                }
            }, cancellationToken).ConfigureAwait(false);
        }