Асинхронное исключение не было поймано или проглочено

Обновление из будущего: TL; DR для отлова выражений в асинхронных методахawait, Task.WaitAll, или же.Result.

Я создал несколько запутанный асинхронный метод, который просто запускает другие асинхронные методы. Вы можете игнорировать большинство из них, так как интерес представляет только строка var mSpekTask ... кроме того, меня не волнует логика, я только хочу знать, куда делось мое исключение. Моя главная проблема заключается в том, что ex.ToString () никогда не срабатывает, даже если внутри mSpecTask определенно происходит исключение.

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();
        }
  }

Вот код для LoadMSpecAsync

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

Вот код для LoadAsync, await db.ExecuteTVP (progress, spName, id, параметры) генерирует исключение.

      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];
  }

Ответы на вопрос(3)

Ваш ответ на вопрос