Eccezioni per la gestione dei pattern di callback - Best practice in .NET 3.5

2

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

  1. 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
    }
}
  1. Utilizzare due parametri nella richiamata - Risultato, Eccezione. Ho avuto questa idea dai callback JavaScript.
void OperationNameAsync(Action<Result, Exception> callback) {..}
  1. 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) {..}
  1. Utilizza callback separati per OnError e OnSuccess
void OperationNameAsync(Action<Response> onSuccessCallback, Action<Exception> onErrorCallback) {..}
    
posta Kalyanaraman Santhanam 29.10.2014 - 01:59
fonte

0 risposte