Η αλήθεια είναι ότι τα ασύγχρονα πράγματα, φαίνονται όντως μεγάλο μπέρδεμα στην αρχή ...
zekia:
1. Τα async tasks εκτελούνται παράλληλα; Δηλαδή η διαφορά μιας async page και μιας non async είναι πως η εκτέλεση του κάθε task που οριζω γίνεται ανεξάρτητα απο την εκτέλεση κάποιου άλλου;
.. ναί, σε γενικές γραμμές, αυτό ισχύει. Εκτελούνται παράλληλα και αυτόνομα. Αυτό βέβαια προϋποθέτει ότι ο κωδικογράφος έχει προσέξει τι γράφει, έχοντας αυτόν τον παραλληλισμό κατα νού.
zekia:
2. Στον κωδικα που φαίνεται στο link υπάχει μια μέθοδος ProcessItems() η οποία επεξεργάζεται κάθε response. Αν εγώ θέλω να επεξεργάζομαι με διαφορετικό τρόπo κάθε response, δηλ να έχω ουσιαστικά περισσότερες απο μια μεθόδους ProcessItems(), τι ακριβώς πρέπει να κάνω.
... δεν έχω αυτή τη στιγμή Visual Studio μπροστά μου, οπότε διατηρώ μια επιφύλαξη όσον αφορά αυτό που θα γράψω παρακάτω.
Στο παράδειγμα που χρησιμοποιείς, στη μέθοδο IAsyncResult BeginAsyncWork1(Object sender, EventArgs e, AsyncCallback cb, object state), η τελευταία παράμετρος είναι ένα object. Στο παράδειγμα ο φίλος μας δεν το χρησιμοποιεί, αλλά ...
Το IAsyncResult που επιστρέφει η μέθοδος, έχει ένα property State ( ή κάτι παραπλήσιο ). Στη μέθοδο που καλείται όταν τελειώσει το task, στην void EndAsyncWork1(IAsyncResult asyncResult) δηλαδή, το σύστημα θα σου επιστρέψει το IAsyncResult που του έδωσε η πρώτη μέθοδος.
Εκεί, αν στο state έχεις βάλει κάτι ενδεικτικό, θα μπορούσες να καλέσεις διαφορετική μέθοδο για να κάνει process τα αποτελέσματα.
Να πώ τελειώνοντας -> δε μας γράφεις καλύτερα όλο το σενάριο που θες να υλοποιήσεις; Ίσως υπάρχει πιο "δομημένος" - δε θέλω να γράψω "σωστός" - τρόπος να κάνεις αυτό που θες.
Επίσης, στο blog του KelMan, είχα διαβάσει μια εισαγωγή στο async programming σε .NET, που ήταν πολύ καλή εισαγωγή, με απλά και κατανοητά παραδείγματα. Έψαξα λίγο το blog αλλά δε βρήκα το link, συγνώμμη, ίσως αξίζει τον κόπο να το ψάξεις, είναι καλό διάβασμα και θα σε βοηθήσει.
Καλό μας απόγευμα, happy coding !
Angel
O:]