2017-10-25 4 views
0

Betrachten Sie eine Schrittfunktion mit einem .net Lambda darin.Ausnahme mit neuer Zeile in Lambda meldet nicht ordnungsgemäß Schritt Funktion

Wenn die Lambda eine Ausnahme auslöst, die eine neue Zeile in der Nachricht enthält, wird der Schritt Funktion nicht den Typ richtig erkennen und stattdessen berichtet:

Fehler

Lambda.Unknown

Ursache

Die Ursache konnte nicht ermittelt werden weil Lambda keinen Fehlertyp zurückgegeben hat.

Die einfachste Repro besteht darin, ein .net Lambda zu erstellen und sofort eine ArgumentNullException zu werfen.

Für unsere benutzerdefinierten Ausnahmen konnte ich keine Zeilenumbrüche erzwingen. Aber für eingebaute Ausnahmen ist das ein Schmerz. Auch das Erstellen einer benutzerdefinierten Ausnahme und das Übergeben der problematischen Ausnahme als innere Ausnahme funktioniert immer noch nicht.

Ich musste eine Ausnahme erstellen, die den Text der ursprünglichen Ausnahme (Entfernen von Zeilenumbrüchen) verfügbar macht, so dass ich zumindest die Nachricht erhalten kann. Da der Typ dieser Ausnahme jedoch immer derselbe ist, verliere ich je nach Typ die in den Step-Funktionen verfügbaren schönen Verzweigungen.

Hinweis: Ich denke auch, doppelte Anführungszeichen in der Nachricht auch Dinge vermasseln.

Irgendwelche Ideen? Ich glaube, das ist ein Fehler in AWS und im Idealfall sollte ich in der Lage sein, irgendeine Ausnahme auszulösen und die Step-Funktion würde dies korrekt melden.

Antwort

0

Wenn die NL Zeichen diejenigen sind, die Sie die Mühe, die Sie einen Wrapper um Ihre lamdbdas verwenden könnten die gleiche Ausnahme zu werfen, aber ohne NL, so etwas wie (vorausgesetzt, Ihr lambda Rückkehr int):

public Func<int> BuildLambda(Func<int> orig) { 
    return() => { 
      try { 
       return orig(); 
      } catch (Exception e) { 
       if (e.Message == null) throw e; 
       throw (Exception)Activator.CreateInstance(e.GetType(), e.Messsage.Replace("\n", ""); 
      } 
    } 
} 
+0

Diese war genau das, womit ich anfing! Das Problem ist, dass * viele * Ausnahmen andere Informationen und Eigenschaften enthalten und dementsprechend unterschiedliche Konstruktoren haben. Beispielsweise ist der Konstruktor für die ArgumentNullException, der eine einzelne Zeichenfolge verwendet, nicht für die Nachricht - es ist für den Namen der Eigenschaft. Ich vergesse jetzt, aber es gab eine andere Ausnahme, die ich fing (einige Netzwerkausnahme denke ich) und es gab keinen passenden Konstruktor, der nur eine Zeichenkette nahm und so mein Aktivator eine Aktivierungsausnahme warf. –

+0

Ich habe aus Ihrer Frage nicht geschlossen, dass Sie das versucht haben, Sie haben nur auf das Problem mit den 'NL's hingewiesen. In diesem Fall löst meine Antwort nichts, obwohl ich glaube, dass ein besserer Wrapper es tun sollte. – dcg

+0

Ich habe versucht, enthusiastisch und unterstützend zu sagen "hey, das ist eine großartige Idee und ich habe das versucht". Ich hatte wirklich vergessen, dass das mein erster Angriffswinkel war, bis ich deine Antwort gelesen habe (ich habe versucht, dies für eine Weile zu beheben), also entschuldige ich mich, dass ich es nicht erwähnt habe. Es ist schwierig zu wickeln, ohne die Fähigkeit zu verlieren, in der Schrittfunktion darauf zu reagieren. Die beste Idee bisher ist, sehr spezifische Ausnahmen zu fangen, wo ich weiß, dass ich eine TemporaryException wiederholen will (schrecklicher Name, aber du weißt, was ich meine), sonst eine PermenantException werfen und aufgeben. –

Verwandte Themen