(Chiedendo questo qui invece di SO perché non so nemmeno quale tecnologia etichettare con:))
Il mio team sta per avviare un progetto per convertire gran parte della nostra base di codice in modo da utilizzare l'I / O di file asincrono, poiché il nostro supporto di archiviazione file viene sempre più individuato attraverso una connessione a latenza elevata. Abbiamo alcune esperienze di base con lo sviluppo asincrono, ma questo è su una scala più ampia rispetto al nostro lavoro precedente. A questo punto, non sono nemmeno sicuro da dove cominciare a cercare tecnologie, schemi o documentazione su come risolvere questo problema.
L'impostazione di base che dobbiamo lavorare all'interno ha applicazioni client con un'interfaccia utente che invia richieste di file a qualche processo in background a esecuzione locale, che fa il lavoro effettivo di comunicazione con i servizi di archiviazione di file per ottenere dati. (Questo livello "proxy" è necessario perché abbiamo un numero di applicazioni client che devono condividere i servizi file, i risultati memorizzati nella cache, ecc.)
Il design che ho nella mia testa sarebbe che un cliente inviasse una richiesta al servizio, che a sua volta inviasse una richiesta ai servizi di archiviazione di file per iniziare un lavoro di I / O asincrono. A mano a mano che veniva effettuato il download del file, il servizio riceverebbe le notifiche e quindi avrebbe attivato un tipo di meccanismo di callback per il client dell'interfaccia utente per segnalare il processo e / o il completamento. Ciò significa che ho bisogno di una sorta di meccanismo cross-process per l'esecuzione di callback.
In precedenza abbiamo utilizzato i servizi duplex WCF per implementare qualcosa di simile a questo, ma non sono sicuro che funzionerà correttamente nel nostro caso corrente. In particolare, vogliamo gestire il caso in cui un cliente invia una richiesta, quindi esce mentre era in corso il recupero. Il servizio deve essere in grado di rilevare che il client è stato terminato ma mantenere il download del file; quello che so sui canali duplex di WCF implicherebbe che la chiusura del canale del client terminerebbe anche il canale del servizio. Inoltre, preferirei non richiedere che l'app client sieda in una sorta di loop spin-lock in attesa che la chiamata async termini, ma ancora una volta, la mia ricerca mi ha portato a credere che i callback duplex operino solo nel contesto di una singola chiamata WCF, quindi dovremmo mantenere il thread chiamante in giro per la durata.
Quali altri meccanismi ci sono per la registrazione e l'invio di messaggi in stile callback attraverso il processo? Il team preferirebbe una soluzione completamente gestita, anche se sono certamente aperto a opzioni non gestite se in qualche modo sono significativamente migliori.