Descargue varios archivos async y espere a que todos terminen antes de ejecutar el resto del código

Estoy tratando de descargar varios archivos de Internet y espero a que todos terminen. Esta es una aplicación de consola de C # que estoy ejecutando, por lo que no debería ser necesario ningún controlador de eventos de la barra de progreso. Sin embargo, actualmente solo sigue ejecutando el código aunque no se hayan descargado todos los archivos.

1.Descargando todos los archivos!2.Finished descargar el archivo A3.Finalizado descargando todos los archivos!4. Acabado de descargar el archivo B5. Acabado de descargar el archivo C

¿Cómo esperarías hasta que todos los archivos de descarga asíncrona estén terminados?

 private void DownloadMultipleFiles(List<DocumentObject> doclist)
    {
        foreach(var value in doclist){
            try
            {
                using (WebClient webClient = new WebClient())
                {
                    string downloadToDirectory = @Resources.defaultDirectory + value.docName;
                    webClient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
                    webClient.DownloadFileCompleted += client_DownloadFileCompleted;
                    webClient.DownloadFileAsync(new Uri(value.docUrl), @downloadToDirectory);

                    //Add them to the local
                    Context.listOfLocalDirectories.Add(downloadToDirectory);
                }         
            }
            catch (Exception)
            {
                Errors.printError("Failed to download File: " + value.docName);
            }
        }
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta