private async Task <ResourceResponse> SendAsyncWorker(IConversations conversations)
        {
            // Create conversation if needed
            if (this.Activity.Conversation?.Id == null)
            {
                var conversationId = await conversations.CreateOrGetDirectConversationAsync(this.TenantId, this.Activity.Recipient.Id);

                this.Activity.Conversation = new ConversationAccount {
                    Id = conversationId
                };
            }

            // Is this activity going to split? If so, send it as a reply chain
            if ((this.MessageType == MessageType.Event) && this.IsActivitySubjectToSplitting(this.Activity))
            {
                // Create the reply chain
                var rootMessage = new Activity(ActivityTypes.Message)
                {
                    Text     = this.Activity.Text,
                    Entities = this.Activity.Entities,
                };
                var conversationResource = await conversations.CreateReplyChainAsync(this.Activity.Conversation.Id, rootMessage);

                // Post the cards as a messages in the reply chain
                ResourceResponse response = null;
                foreach (var attachment in this.Activity.Attachments)
                {
                    response = await conversations.SendCardAsync(conversationResource.Id, attachment);
                }

                // There's no single resource that can be returned, so just return the last one
                return(response);
            }
            else
            {
                return(await conversations.SendToConversationWithRetriesAsync(this.Activity));
            }
        }