Пример #1
0
        public static async Task <bool> WaitForLightBulbSessionAsync(ILightBulbBroker broker, IWpfTextView view, CancellationToken cancellationToken)
        {
            var startTime = DateTimeOffset.Now;

            var active = await Helper.RetryAsync(async cancellationToken =>
            {
                if (broker.IsLightBulbSessionActive(view))
                {
                    return(true);
                }

                if (cancellationToken.IsCancellationRequested)
                {
                    throw new InvalidOperationException("Expected a light bulb session to appear.");
                }

                if (broker.IsLightBulbSessionActive(view))
                {
                    var session             = broker.GetSession(view);
                    var hasSuggestedActions = await broker.HasSuggestedActionsAsync(session.ActionCategories, view, cancellationToken);

                    return(hasSuggestedActions);
                }

                return(false);
            }, TimeSpan.FromMilliseconds(1), cancellationToken);

            if (!active)
            {
                return(false);
            }

            await WaitForItemsAsync(broker, view, cancellationToken);

            return(true);
        }