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)); } }