private async Task MigrateConversation( Conversation conversation, CancellationToken cancellationToken) { Logger.Debug("Getting messages ..."); using (AsyncEnumerator <Message> messageEnumerator = await input.GetMessages(conversation.Id, filter)) { while (await messageEnumerator.Move()) { // Read message. Message message = await messageEnumerator.Read(); Logger.Trace("Read message: {0}", message); if (message.MessageType == Enums.InternalMessageType.Unknown) { Logger.Warn("Skip message."); continue; } // Get message group and open new group if necessary. Group group = await grouper.GetGroup(input, conversation, message); Logger.Trace("Group: {0}", group); if (!group.Equals(output.CurrentGroup)) { output.EndGroup(); output.BeginGroup(group); } // Insert message. await output.InsertMessage(message); // Check cancellation token. cancellationToken.ThrowIfCancellationRequested(); } } }