¿Cómo descargo varios archivos de manera asíncrona usando el cliente web, pero uno a la ve

Ha sido sorprendentemente difícil encontrar un ejemplo de código para descargar múltiples archivos usando el método asíncrono de clase de cliente web, pero descargando uno a la vez.

¿Cómo puedo iniciar una descarga asincrónica, pero esperar hasta que termine la primera hasta la segunda, etc. Básicamente una que.

(tenga en cuenta que no quiero usar el método de sincronización, debido a la mayor funcionalidad del método asíncrono).

El siguiente código inicia todas mis descargas a la vez. (la barra de progreso está por todas partes)

private void downloadFile(string url)
        {
            WebClient client = new WebClient();

            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);

            // Starts the download
            btnGetDownload.Text = "Downloading...";
            btnGetDownload.Enabled = false;
            progressBar1.Visible = true;
            lblFileName.Text = url;
            lblFileName.Visible = true;
            string FileName = url.Substring(url.LastIndexOf("/") + 1,
                            (url.Length - url.LastIndexOf("/") - 1));
             client.DownloadFileAsync(new Uri(url), "C:\\Test4\\" + FileName);

        }

        void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {

        }

        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            double bytesIn = double.Parse(e.BytesReceived.ToString());
            double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
            double percentage = bytesIn / totalBytes * 100;
            progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
        }

Respuestas a la pregunta(3)

Su respuesta a la pregunta