示例#1
0
        private async Task <Document> ReplaceThreadWithTask(Document document, MemberAccessExpressionSyntax node,
                                                            CancellationToken cancellationToken)
        {
            var block        = node.Ancestors().OfType <BlockSyntax>().First();
            var variableName = node.Expression.ToString();

            var threadArgument = FindThreadArgument(variableName, block);

            if (threadArgument == null)
            {
                return(document);
            }

            var invocationStatement = TaskSyntaxHelper.CreateInvocationStatement(threadArgument);

            var documentEditor = await DocumentEditor.CreateAsync(document, cancellationToken);

            documentEditor.ReplaceNode(node.Parent, invocationStatement);

            RemoveThreadingCode(variableName, block, documentEditor);

            var newDocument = documentEditor.GetChangedDocument();

            newDocument = await AddUsingsToDocument(newDocument);

            return(newDocument);
        }
        private async Task <Document> ReplaceThreadWithTask(Document document, SyntaxNode node,
                                                            CancellationToken cancellationToken)
        {
            var root = await document.GetSyntaxRootAsync(cancellationToken);

            var argument            = node.DescendantNodes().OfType <ArgumentSyntax>().First();
            var invocationStatement = TaskSyntaxHelper.CreateInvocationStatement(argument);

            var newRoot = root.ReplaceNode(node, invocationStatement);

            newRoot = UsingHandler.AddUsingIfNotExists(newRoot, TaskUsing);
            var newDocument = document.WithSyntaxRoot(newRoot);

            return(newDocument);
        }