Voglio usare il TPL .NET per fare in modo asincrono un DIR /S
e cercare ogni sottodirectory su un disco rigido, e voglio cercare una parola in ogni file ... come dovrebbe essere la mia API?
In questo scenario, so che ogni sottodirectory avrà 0,10000 file o 0 ... 10000 directory. So che l'albero non è bilanciato e desidera restituire i dati (in relazione alla sua posizione nella gerarchia) non appena disponibili. Sono interessato a ottenere i dati il più rapidamente possibile, ma voglio anche aggiornare quel risultato se vengono trovati dati "migliori" (meglio significa più vicino alla radice di c:)
Potrei anche essere interessato a trovare tutte le partite in relazione alla sua posizione nella gerarchia. (simile a un rapporto)
Question:
How should I return data to my caller?
La mia prima ipotesi è che penso di aver bisogno di un oggetto condiviso che manterrà lo "stato" corrente del traversal (avviato | notstarted | complete) e potrebbe basarlo su System.Collections.Concurrent
.
Un'altra idea che sto prendendo in considerazione è il modello consumatore / produttore (che può essere gestito da ConcurrentCollections), ma non sono sicuro di come gli oggetti "assomigliano".
Vincolo logico opzionale: l'API non deve occuparsi di questo, ma nel mio progetto "mondo reale", se una directory contiene file, solo un file conterrà mai la parola che sto cercando. Se qualcuno dovesse letteralmente fare un DIR /S
come descritto sopra, avrebbe bisogno di tenere conto di più di un file corrispondente per sottodirectory.
Ulteriori informazioni :
Uso le tabelle di Azure per archiviare una gerarchia di dati utilizzando questi metodi di estensione TPL . Un "nodo" è una tabella. Non solo ogni nodo della gerarchia ha una relazione con un numero qualsiasi di nodi, ma è possibile che ogni nodo abbia un collegamento reciproco su qualsiasi altro nodo. Questo potrebbe avere problemi con la ricorsione, ma sto affrontando ciò con un oggetto condiviso nel mio ciclo di ricorsione.
Si noti che ogni "nodo" ha anche la capacità di memorizzare dati locali unici per quel nodo. Sono queste informazioni che sto cercando. In altre parole, sto cercando uno specifico RowKey fisso in una gerarchia di nodi.
Quando cerco il RowKey fisso nella gerarchia, sono interessato a ottenere i risultati VELOCE (primo nodo trovato) ma preferisco i dati che sono "più vicini" al punto di partenza della gerarchia.
Dal momento che molti nodi possono avere il RowKey particolare a cui sono interessato, a volte potrei voler ottenere un report di TUTTI i nodi che contengono questo RowKey.