ciao.
Dato che un esempio parla piu di 100 parole scritte male(perchè sono poco capace di spiegare) lo posto quello che vorrei fare:
namespace open
{
class processaXml
{
public processaXml(){}
void LeggieProcessa(string file)
{
Task processo1;
Task processo2;
var lines = new ConcurrentQueue<StringBuilder>();
var strbuilder = new StringBuilder();
processo1 = Task.Run(() =>
{
using (var reader = new StreamReader(file))
{
string line;
while ((line = reader.ReadLine()) != null)
{
strbuilder.Append(line);
}
}
});
processo2 = Task.Run(() =>
{
//qui faccio il mio parsing e la deserializzazione
});
Task.WaitAll(new Task[] { processo1, processo2 });
}
}
}
come vedete ho due task il primo processo1 legge il file e il secondo fa un parsing che puo essere piu o meno complesso e deserializza gli elementi xml che arrivano dal primo task.
1)Non so se è ilmetodo migliore , ma vorrei che quando il parsing diciamo di 100 elementi è finito il processo2 richiede nuove righe e il processo1 gliele manda
2)Moreno mi aveva mandato questo link :
qui c'è un esempio di come puoi notificare il progresso da Task asincroni.
http://blog.stephencleary.com/2012/02/reporting-progress-from-async-tasks.html questo per usare un evento per la notifica del progresso o una notifica che potrebbe andare bene anche a me
3)io alla fine ho messo il waitall di tutti e due i task in modo che uno faccia sopravvivere l'altro(l'evento di lettura file è quello che comanda alla fine perchè finche ci sono righe il processo2 deve rimanere in vita) ma penso che sia sbagliato e non so come fare si che "un task sopravviva" senza un ciclo infinito che mi occupa un core almeno cosi mi sembra di aver visto nel debug di vs2015 e il task penso proprio che muoia quando ha finito il suo lavoro.
4)Le funzioni asincrone lvorano in modo asincrono sullo stesso thread mi sembra di aver letto qui sul forum e forse sarebbe meglio rivolgersi a queste, Alla fine posso usare le notifiche per richiamare la funzione asincrona al posto del processo2 che esegue il suo lavoro e "muore" oppure richiamare il task dato che ho letto che la creazione di un task è molto meno dispendiosa della creazione di thread.
4)una nota particolare va al continuewith dei task che forse potrebbe aiutare anche senza l'uso di notifiche od eventi quando il processo1 raggiounge per es 1000 righe si fa il continue del task sul processo2 , chiedo non sono per nulla esperto di programmazione asincrona ma ho comperato un buon libro sul c#5.
grazie.