public Task<bool> ExecuteAsync(ITaskCoverageManager taskCoverageManager, IVsSolutionTestCoverage vsSolutionTestCoverage, IDocumentProvider documentProvider)
        {
            string methodName = Method.Identifier.ValueText;
            RaiseTaskStartedEvent(taskCoverageManager);

            var documentSyntaxTree = documentProvider.GetSyntaxNodeFromTextSnapshot(TextBuffer.CurrentSnapshot);

            var methodNode = documentSyntaxTree.DescendantNodes()
                .OfType<MethodDeclarationSyntax>()
                .FirstOrDefault(x => x.Identifier.ValueText == methodName);

            if (methodNode == null)
                return Task.FromResult(false);

            Task<bool> task = vsSolutionTestCoverage.CalculateForSelectedMethodAsync(ProjectName, methodNode);

            var finalTask = task.ContinueWith((x, y) =>
            {
                if(!x.Result)
                    taskCoverageManager.ReportTaskToRetry(this);

                RaiseTasCompletedEvent(taskCoverageManager);
                return x.Result;

            }, null, TaskSchedulerManager.Current.FromSynchronizationContext());

            return finalTask;
        }
        public Task<bool> ExecuteAsync(ITaskCoverageManager taskCoverageManager, IVsSolutionTestCoverage vsSolutionTestCoverage,
            IDocumentProvider documentProvider)
        {
            taskCoverageManager.RaiseEvent(new DocumentCoverageTaskStartedArgs(DocumentPath));

            string documentContent = TextBuffer.CurrentSnapshot.GetText();
            var task = vsSolutionTestCoverage.CalculateForDocumentAsync(ProjectName, DocumentPath, documentContent);

            var finalTask = task.ContinueWith((finishedTask, y) =>
            {
                if (finishedTask.Result)
                    taskCoverageManager.Tasks.RemoveAll(t => IsTaskInDocument(t, DocumentPath));
                else
                    taskCoverageManager.ReportTaskToRetry(this);

                taskCoverageManager.RaiseEvent(new DocumentCoverageTaskCompletedArgs(DocumentPath));

                return finishedTask.Result;
            }, null, TaskSchedulerManager.Current.FromSynchronizationContext());

            return finalTask;
        }