Asynchrone Ausnahme, die nicht abgefangen oder verschluckt wird
Update aus der Zukunft: TL; DR, um Ausdrücke in asynchronen Methoden abzufangen, müssen Sieawait
, Task.WaitAll
, oder.Result
.
Ich habe eine etwas verschlungene asynchrone Methode erstellt, die nur andere asynchrone Methoden ausführt. Sie können das meiste davon ignorieren, da nur die Zeile var mSpekTask ... von Interesse ist. Außerdem interessiert mich die Logik nicht, ich möchte nur wissen, wohin meine Ausnahme ging. Mein Hauptproblem ist, dass ex.ToString () nie getroffen wird, obwohl in mSpecTask definitiv eine Ausnahme auftritt.
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();
}
}
Hier ist der Code für LoadMSpecAsync
public Task<ResultSet> LoadMSpecAsync(IProgress<int> prg,
IEnumerable<string> ids)
{
return this.LoadAsync(prg, ids, Selector.M, SPMS, x => x.Order);
}
Hier ist der Code für LoadAsync, warten db.ExecuteTVP (Fortschritt, spName, IDs, Parameter) generiert eine Ausnahme.
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];
}