Ho creato una libreria che è un invocatore per un servizio web da qualche altra parte. La libreria espone metodi asincroni, dal momento che le chiamate al servizio web sono un buon candidato per questo.
All'inizio tutto andava bene, avevo metodi con operazioni facili da capire in un modo CRUD, dato che la libreria è una specie di repository.
Ma la logica aziendale ha iniziato a diventare complessa e alcune procedure implicano il concatenamento di molte di queste operazioni asincrone, a volte con percorsi diversi a seconda del valore del risultato, ecc. ecc.
All'improvviso, tutto è molto disordinato, per fermare l'esecuzione in un punto di rottura non è molto utile, per scoprire cosa sta succedendo o dove nella tempistica del processo hai smesso di diventare un dolore ... Lo sviluppo diventa meno veloce , meno agile, e catturare quegli insetti che si verificano una volta ogni 1000 volte diventa un inferno.
Dal punto tecnico, un repository che espone metodi asincroni sembrava una buona idea, perché alcuni livelli di persistenza potevano avere ritardi, e puoi usare l'approccio asincrono per sfruttare al massimo il tuo hardware. Ma dal punto di vista funzionale, le cose sono diventate molto complesse e considerando quelle procedure in cui erano necessarie una dozzina di chiamate diverse ... Non conosco il reale valore del miglioramento.
Dopo aver letto su TPL per un po ', mi è sembrata una buona idea per la gestione delle attività, ma nel momento in cui devi combinarle e iniziare a riutilizzare le funzionalità esistenti, le cose diventano molto complicate. Ho avuto una buona esperienza nell'usarlo per scenari molto concreti, ma ho avuto esperienze negative nell'utilizzarli a grandi linee.
Come lavori in modo asincrono? Lo usi sempre? O solo per processi di lunga durata?