❔ Any way to optimize this? Task.WhenAll
This takes anywhere from 6-14 seconds, Any way to make it faster?
private async Task HandlePhaseAudioFileStorage()
{
var tasks = new List<Task>();
foreach (var phase in _currentLesson.Phases)
{
// Generate default bot audio if not provided
if (phase.BotAudio is null)
{
phase.BotAudio = await _googleApiManager.TextToSpeechAsync(phase.BotText, _srcLanguageCode);
var defaultBotBlobKey = _azureBlobStorageManager.GenerateBlobKey();
phase.DefaultPhaseBlobFileId = defaultBotBlobKey;
var botAudioWithTranslation = new AudioAndTranslation(phase.BotAudio, phase.BotText);
tasks.Add(_azureBlobStorageManager.SaveServerGeneratedFilesBytesAsync(defaultBotBlobKey,
botAudioWithTranslation));
}
if (phase.BotResponseTextOnSuccess is not null)
{
var successBotBlobKey = _azureBlobStorageManager.GenerateBlobKey();
phase.SuccessPhaseBlobFileId = successBotBlobKey;
var botSuccessAudioTask = phase.BotResponseAudioOnSuccess is not null
? Task.FromResult(phase.BotResponseAudioOnSuccess)
: _googleApiManager.TextToSpeechAsync(phase.BotResponseTextOnSuccess, _srcLanguageCode);
tasks.Add(botSuccessAudioTask.ContinueWith(async (botSuccessAudioTaskResult) =>
{
var botSuccessAudio = await botSuccessAudioTaskResult;
var botSuccessAudioWithTranslation =
new AudioAndTranslation(botSuccessAudio, phase.BotResponseTextOnSuccess);
await _azureBlobStorageManager.SaveServerGeneratedFilesBytesAsync(successBotBlobKey,
botSuccessAudioWithTranslation);
}));
}
}
}
await Task.WhenAll(tasks);
} private async Task HandlePhaseAudioFileStorage()
{
var tasks = new List<Task>();
foreach (var phase in _currentLesson.Phases)
{
// Generate default bot audio if not provided
if (phase.BotAudio is null)
{
phase.BotAudio = await _googleApiManager.TextToSpeechAsync(phase.BotText, _srcLanguageCode);
var defaultBotBlobKey = _azureBlobStorageManager.GenerateBlobKey();
phase.DefaultPhaseBlobFileId = defaultBotBlobKey;
var botAudioWithTranslation = new AudioAndTranslation(phase.BotAudio, phase.BotText);
tasks.Add(_azureBlobStorageManager.SaveServerGeneratedFilesBytesAsync(defaultBotBlobKey,
botAudioWithTranslation));
}
if (phase.BotResponseTextOnSuccess is not null)
{
var successBotBlobKey = _azureBlobStorageManager.GenerateBlobKey();
phase.SuccessPhaseBlobFileId = successBotBlobKey;
var botSuccessAudioTask = phase.BotResponseAudioOnSuccess is not null
? Task.FromResult(phase.BotResponseAudioOnSuccess)
: _googleApiManager.TextToSpeechAsync(phase.BotResponseTextOnSuccess, _srcLanguageCode);
tasks.Add(botSuccessAudioTask.ContinueWith(async (botSuccessAudioTaskResult) =>
{
var botSuccessAudio = await botSuccessAudioTaskResult;
var botSuccessAudioWithTranslation =
new AudioAndTranslation(botSuccessAudio, phase.BotResponseTextOnSuccess);
await _azureBlobStorageManager.SaveServerGeneratedFilesBytesAsync(successBotBlobKey,
botSuccessAudioWithTranslation);
}));
}
}
}
await Task.WhenAll(tasks);
}