Sto cercando di implementare il pattern di callback con la gestione degli errori, in modo tale che l'errore venga catturato e trasferito al codice di callback con la risposta. Dal momento che sto usando .NET 3.5, non posso usare il modello Task (TAP) che ci fornisce le proprietà t.Result e t.Exception. Ho provato alcuni googling per le migliori pratiche e ho finito con il modello APM Begin / End. Poiché non voglio bloccare il thread principale, ho ignorato questo modello.
Quindi ecco un elenco di idee progettuali che attualmente ho. Mi piacerebbe sapere quale approccio è il modo migliore / popolare per implementare il pattern di callback
- Posiziona l'eccezione invece direttamente l'oggetto risultato. Non mi piaceva molto questo metodo dato che cambia la definizione dell'oggetto risultato
void OperationNameAsync(Action<Result> callback) {..} void OperationCallback(Result result) { if (result.Exception != null) { // successful result } else { // exception handling } }
- Utilizzare due parametri nella richiamata - Risultato, Eccezione. Ho avuto questa idea dai callback JavaScript.
void OperationNameAsync(Action<Result, Exception> callback) {..}
- Utilizzare un oggetto wrapper generico dire Response che contiene Result & Eccezione. Cercando di imitare ciò che l'oggetto Task ottiene.
class Response { T Result; Exception Exception; } void OperationNameAsync(Action<Response<Result>> callback) {..}
- Utilizza callback separati per OnError e OnSuccess
void OperationNameAsync(Action<Response> onSuccessCallback, Action<Exception> onErrorCallback) {..}