ho questo codice di esempio:ContinueWith concatenamento non funziona come previsto
static void Main(string[] args) {
var t1 = Task.Run(async() => {
Console.WriteLine("Putting in fake processing 1.");
await Task.Delay(300);
Console.WriteLine("Fake processing finished 1. ");
});
var t2 = t1.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 2.");
await Task.Delay(200);
Console.WriteLine("Fake processing finished 2.");
});
var t3 = t2.ContinueWith(async (c) => {
Console.WriteLine("Putting in fake processing 3.");
await Task.Delay(100);
Console.WriteLine("Fake processing finished 3.");
});
Console.ReadLine();
}
L'uscita della console mi sconcerta:
- Mettere in lavorazione falso 1.
- elaborazione falso finito 1.
- Messa in elaborazione falsa 2.
- Messa in elaborazione falsa 3. elaborazione
- falso finito 3.
- elaborazione falso finito 2.
Sto cercando di catena dei compiti in modo da eseguire uno dopo l'altro, quello che sto facendo di sbagliato? E non posso usare attendere, questo è solo codice di esempio, in realtà sto facendo la coda ai compiti in arrivo (alcuni asincroni, altri no) e voglio eseguirli nello stesso ordine in cui sono entrati ma senza parallelismo, ContinueWith sembrava meglio della creazione un ConcurrentQueue e la gestione di tutto me stesso, ma semplicemente non funziona ...
l'attestazione di attesa "divide" l'attività. Quindi t1 fa riferimento solo alla prima metà. Sono sorpreso Mettendo in elaborazione falsa 2 non accade immediatamente dopo Mettendo in elaborazione falsa 1 –
@WeylandYutani Spiego nella mia risposta perché quello non accade. – Servy
in realtà sto parlando di spazzatura di nuovo, quindi ignorami –