Exemplo n.º 1
0
        private Task <PersistentResponse> ProcessSignal(SignalResult result, long?messageId = null)
        {
            if (result.TimedOut)
            {
                PersistentResponse response = GetEmptyResponse(messageId);

                // Return a task wrapping the result
                return(TaskAsyncHelper.FromResult(response));
            }

            // Get the response for this message id
            return(GetResponse(messageId ?? 0)
                   .Then <PersistentResponse, long?>((response, id) => response ?? GetEmptyResponse(id), messageId));
        }
Exemplo n.º 2
0
        private Task FinishAsync(TaskCompletionSource <object> tcs)
        {
            return(tcs.Task.ContinueWith(task =>
            {
                UnsetWorking();

                if (task.IsFaulted)
                {
                    return TaskAsyncHelper.FromError(task.Exception);
                }

                return TaskAsyncHelper.Empty;
            }).FastUnwrap());
        }
Exemplo n.º 3
0
        private Task <IEnumerable <Message> > GetMessages(long id, IEnumerable <string> signals)
        {
            var pendingMessagesTasks = (from signal in signals
                                        select _store.GetAllSince(signal, id)).ToArray();

            // If there are no pending messages, we need to shortcut since ContinueWhenAll
            // blows up for empty arrays.
            if (!pendingMessagesTasks.Any())
            {
                return(TaskAsyncHelper.FromResult(Enumerable.Empty <Message>()));
            }

            // Wait until all of the tasks are done before we return
            return(pendingMessagesTasks.AllSucceeded(() => (IEnumerable <Message>)pendingMessagesTasks.SelectMany(t => t.Result).OrderBy(m => m.Id).ToList()));
        }
Exemplo n.º 4
0
        public Task <IOrderedEnumerable <Message> > GetAllSince(IEnumerable <string> keys, string id)
        {
            long longId;

            if (!Int64.TryParse(id, NumberStyles.Any, CultureInfo.InvariantCulture, out longId))
            {
                throw new ArgumentException("id must be a valid integer", "id");
            }

            if (longId > _lastMessageId)
            {
                longId = 0;
            }

            var items = keys.SelectMany(k => GetAllCore(k).Where(item => Int64.Parse(item.Id, CultureInfo.InvariantCulture) > longId))
                        .OrderBy(item => item.Id);

            return(TaskAsyncHelper.FromResult <IOrderedEnumerable <Message> >(items));
        }
Exemplo n.º 5
0
        private Task <PersistentResponse> ProcessSignal(Task <SignalResult> signalTask, long?messageId = null)
        {
            if (signalTask.Result.TimedOut)
            {
                // If we timed out waiting for a signal we have a message id then return null
                PersistentResponse response = null;

                // Otherwise ee need to return 0 so that the next request we'll get all messages
                // on the next try
                if (messageId == null)
                {
                    response = new PersistentResponse
                    {
                        MessageId = 0
                    };
                }

                // Return a task wrapping the result
                return(TaskAsyncHelper.FromResult(response));
            }

            // Get the response for this message id
            return(GetResponse(messageId ?? 0));
        }