コード例 #1
0
        /// <summary>
        /// Begins to get messages of specified member asynchronously.
        /// </summary>
        /// <param name="teamName">Name of the Scrum team.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="lastMessageId">ID of last message the member received.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>
        /// List of messages.
        /// </returns>
        public async Task <IList <Message> > GetMessages(string teamName, string memberName, long lastMessageId, CancellationToken cancellationToken)
        {
            var encodedTeamName      = _urlEncoder.Encode(teamName);
            var encodedMemberName    = _urlEncoder.Encode(memberName);
            var encodedLastMessageId = _urlEncoder.Encode(lastMessageId.ToString(CultureInfo.InvariantCulture));
            var uri = $"GetMessages?teamName={encodedTeamName}&memberName={encodedMemberName}&lastMessageId={encodedLastMessageId}";

            var result = await GetJsonAsync <List <Message> >(uri, cancellationToken);

            ScrumTeamMapper.ConvertMessages(result);
            return(result);
        }
コード例 #2
0
        /// <summary>
        /// Begins to get messages of specified member asynchronously.
        /// </summary>
        /// <param name="teamName">Name of the Scrum team.</param>
        /// <param name="memberName">Name of the member.</param>
        /// <param name="lastMessageId">ID of last message the member received.</param>
        /// <param name="cancellationToken">The cancellation token to cancel operation.</param>
        /// <returns>
        /// List of messages.
        /// </returns>
        public Task <IList <Message> > GetMessages(string teamName, string memberName, long lastMessageId, CancellationToken cancellationToken)
        {
            return(InvokeOperation(async() =>
            {
                await EnsureConnected(cancellationToken);

                try
                {
                    Task <IList <Message> > getMessagesTask;

                    lock (_getMessagesLock)
                    {
                        if (_getMessagesTask != null)
                        {
                            throw new InvalidOperationException("GetMessages is already in progress.");
                        }

                        _getMessagesTask = new TaskCompletionSource <IList <Message> >();
                        getMessagesTask = _getMessagesTask.Task;
                    }

                    await _hubConnection.InvokeAsync("GetMessages", teamName, memberName, lastMessageId, cancellationToken);

                    var result = await getMessagesTask;
                    ScrumTeamMapper.ConvertMessages(result);
                    return result;
                }
                finally
                {
                    lock (_getMessagesLock)
                    {
                        _getMessagesTask?.TrySetCanceled();
                        _getMessagesTask = null;
                    }
                }
            }));
        }