public async Task<IImmutableList<Exception>> WriteMessagesAsync(IEnumerable<AtomicWrite> messages)
{
var writeTasks = messages.Select(async message =>
{
using (var connection = CreateDbConnection())
{
await connection.OpenAsync();
var persistentMessages = ((IImmutableList<IPersistentRepresentation>) message.Payload).ToArray();
var sqlCommand = QueryBuilder.InsertBatchMessages(persistentMessages);
CompleteCommand(sqlCommand, connection);
var journalEntries = persistentMessages.Select(ToJournalEntry).ToList();
await InsertInTransactionAsync(sqlCommand, journalEntries);
}
});
return await Task<IImmutableList<Exception>>
.Factory
.ContinueWhenAll(writeTasks.ToArray(),
tasks => tasks.Select(t => t.IsFaulted ? TryUnwrapException(t.Exception) : null).ToImmutableList());
}