Как узнать, что асинхронный метод выполнил свою работу?
async void вернет управление обратно, не дожидаясь выполнения асинхронного кода внутри. вам же нужно возвращать таску

public async Task DownloadVideo1080PAsync(string path, ProgressBar progressBar, string link)
{
    await ytClient.Videos.Streams.DownloadAsync(audioInfo, Path.Combine(newLink, $"audio.wav"));
    await ytClient.Videos.Streams.DownloadAsync(videoInfo, Path.Combine(newLink, $"video.mp4"), progressHandler);
}

public Task MergeAudioVideoAsync(string link)
{
    return ffmpeg.ExecuteAsync($@"-i video.mp4  -i audio.wav -c:v copy -c:a aac newVideo.mp4");
}

....
  await DownloadVideo1080PAsync(....);
  await MergeAudioVideoAsync(...);
....
вопрос довольно интересный. вы можете загружать синхронно, но придется дольше ждать
загружать асинхронно очень логично. но тогда вам надо изучать доки на api
вы часом не вот это используете?
https://developers.google.com/api-client-library/d...

если да, то логика примерно такая
https://developers.google.com/api-client-library/d...
по IDownloadProgress.Status вы узнаете когда будет 100%, но надо читать доки, возможно есть калбэк сообщающий конкретно о завершении

если другой api, все равно - у вас в коде, для видеопотока, указан progressHandler, сделайте такой же и для аудио. когда оба отловят 100%, тогда время и объединять..
.. еще точнее можно начинать. хотя может оказаться что какие то тайм ауты потребуются, если дисковая система не очень быстрая + загрузка в tmp, а потом копирование в целевую папку. об этом тоже надо искать инфу в доках на api. но когда отловите окончания загрузок, тайм ауты при необходимости, можно и экспериментально подбирать
.. или там изучить подписку на файловые события https://docs.microsoft.com/ru-ru/dotnet/api/system...