Lista de tareas finaliza, pero un subproceso continua. (C# & Android)

Estoy haciendo una app en C# para Android.

Tengo una tarea asincrónica hace un ping a varias ips en mi red local de la siguiente manera:

 public async Task<bool> buscarDispositivos()
 {
    ...
  
    var tasks = new List<Task>();
    ...
    progressDialog = new Android.App.ProgressDialog(this);
    progressDialog.SetProgressStyle(Android.App.ProgressDialogStyle.Spinner);
    progressDialog.SetMessage("Buscando dispositivos, espere...");
    progressDialog.SetCancelable(false);
    progressDialog.Show();
    foreach (string unaDireccion in arregloDirecciones)
    {
      tasks.Add(Task.Run(() =>
      {
        rep = p.Send(unaDireccion); ;// ping_var);
        if (rep.Status == System.Net.NetworkInformation.IPStatus.Success)
        {
          ...
        }
      ));
    }
     await Task.WhenAll(tasks);
     progressDialog.Cancel();
     ...
     ...
     return true;
 }

El síntoma que presenta es que progressDialog seguía funcionando, a pesar de haber finalizado el foreach, así que asumí que no ejecutaba la línea progressDialog.Cancel(), pero al depurar si se ejecutaba esa línea y las que continúan más abajo.

He revisado todas la lista de tareas (tasks) luego del await y todas tienen su estado RanToCompletion.

Así que no se que puede estar pasando.

Cualquier comentario o sugerencia es bienvenido