/// <summary> /// Achtung: Diese Methode wird bereits in einem Background Thread aufgerufen. Also vorischt bzgl. thread safety! /// Deshalb werden die BuildResultArgs bereits vorab im GUI Thread erstellt. /// </summary> static async Task<ParseResult> BuildResultAsync(BuildResultArgs args, CancellationToken cancellationToken) { return await Task.Run(() => { var syntaxTree = args.ParseMethod(args.Text, args.FilePath, cancellationToken).SyntaxTree; return new ParseResult(syntaxTree, args.Snapshot); }, cancellationToken).ConfigureAwait(false); }
/// <summary> /// Diese Methode muss im GUI Thread aufgerufen werden! /// </summary> BuildResultArgs CreateBuildResultArgs() { var args = new BuildResultArgs { Snapshot = TextBuffer.CurrentSnapshot, Text = TextBuffer.CurrentSnapshot.GetText(), FilePath = TextBuffer.GetTextDocument()?.FilePath, ParseMethod = GetParseMethod(TextBuffer) }; return args; }