Excepción asíncrona al no ser atrapado o ser tragado

Actualización del futuro: TL; DR para capturar expresiones en métodos asíncronos que tienes queawait, Task.WaitAllo.Result.

Creé un método asíncrono un tanto complicado que simplemente ejecuta otros métodos asíncronos. Puede ignorar la mayor parte, ya que solo la línea var mSpekTask ... es interesante, además, no me importa la lógica, solo quiero saber dónde fue mi excepción. Mi problema principal es que ex.ToString () nunca se golpea, aunque dentro de mSpecTask definitivamente ocurre una excepción.

public async Task LoadAsync(IEnumerable<ProductRequest> feed, int? customerId,
      IProgress<int> mSpecProgress, Action<Task> mSpecCompletionHandler)
  {
        var ids = feed.Select(x => x.ProductId.ToString()).Distinct().ToList();

        try
        {
           var mSpecTask = this.LoadMSpecAsync(mSpecProgress, ids);
        }
        catch (Exception ex)
        {
           ex.ToString();
        }
  }

Aquí está el código para LoadMSpecAsync

public Task<ResultSet> LoadMSpecAsync(IProgress<int> prg,
     IEnumerable<string> ids)
  {
     return this.LoadAsync(prg, ids, Selector.M, SPMS, x => x.Order);
  }

Aquí está el código para LoadAsync, a la espera de db.ExecuteTVP (progress, spName, ids, parameters) genera una excepción.

      private async Task<Dictionary<Pair, dynamic>> LoadAsync(IProgress<int> progress,
     IEnumerable<string> ids, Selector s, string spName, Func<dynamic, int> k,
      Func<dynamic, dynamic> f = null, object parameters = null)
  {
     parameters = new ExpandoObject().CopyFromSafe(parameters);
     if (spName != SPMAP) ((dynamic)parameters).lang = this.languageCode;

     using (var db = new SqlConnection(this.connectionString))
     {
        await db.OpenAsync();

        var results = await db.ExecuteTVP(progress, spName, ids, parameters);

        db.Close();
     }

     return this.data[s];
  }

Respuestas a la pregunta(3)

Su respuesta a la pregunta