Dies ist die Aufgabe, bei der die Ausnahme ausgelöst wird.Übergeben der Ausnahme von Task.Run, um ordnungsgemäß zu warten, und Debugger
public Task<SensorReading> ReadSensorsAsync(int cell)
{
return Task.Run(() => {
throw new ArgumentNullException();
...
Dies ist die async
Methode:
private async void TimerCallback(object state)
{
try
{
var tasksRead = Enumerable.Range(3, 35).Select(i => sensorReader.ReadSensorsAsync(i)).ToList();
await Task.WhenAll(tasksRead);
var r = tasksRead.Select(x => x.Result).ToList();
var taskRecordREsult = RecordReadingAsync(r).Result;
}
catch(Exception e)
{
// expecting to catch everything here
}
}
Was ich erwartet hatte, dass Ausnahme in await
Teil des Codes behandelt werden würde. Allerdings bekomme ich in Visual Studio-Debugger eine unbehandelte Ausnahme.
Frage - wie alle Art von Ausnahme von Task.Run
zum erwarteten Teil richtig übergeben?
Wenn Sie auf „Weiter“ getroffen, es hat * dann * erwischt? Das habe ich sehr oft gesehen ... –
BTW können Sie den Ausdruck "erwarten" in das Beispiel aufnehmen? – alexm
@JonSkeet: Ja, "weiter" bringt mich zum Warten, aber ich möchte nicht, dass VS mir sagt, dass ich jedes Mal, wenn etwas in "Task.Run" passiert, eine "unbehandelte Ausnahme" habe. – Pablo