Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Asynchronous Page Tasks

Îåêßíçóå áðü ôï ìÝëïò zekia. Τελευταία δημοσίευση από το μέλος KelMan στις 31-01-2008, 14:11. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-01-2008, 14:14 39616

    Asynchronous Page Tasks

    Αυτό ειναι ένα παράδειγμα κώδικα.
    Επειδή προσπαθώ να εισάγω ασύγχρονα requests στην εφαρμογή μου θα ήθελα να με βοηθήσετε σε δυο πράγματα.
    1. Τα async tasks εκτελούνται παράλληλα; Δηλαδή η διαφορά μιας async page και μιας non async είναι πως η εκτέλεση του κάθε task που οριζω γίνεται ανεξάρτητα απο την εκτέλεση κάποιου άλλου;
    2. Στον κωδικα που φαίνεται στο link υπάχει μια μέθοδος ProcessItems() η οποία επεξεργάζεται κάθε response. Αν εγώ θέλω να επεξεργάζομαι με διαφορετικό τρόπo κάθε response, δηλ να έχω ουσιαστικά περισσότερες απο μια μεθόδους ProcessItems(), τι ακριβώς πρέπει να κάνω.

    Δεν είμαι σίγουρη πως έχω καταλάβει ακριβως αυτή την ιστορία με τα async και θα ήθελα να με κατατοπίσετε λιγάκι.
  •  31-01-2008, 13:59 39749 σε απάντηση της 39616

    Απ: Asynchronous Page Tasks

    Η αλήθεια είναι ότι τα ασύγχρονα πράγματα, φαίνονται όντως μεγάλο μπέρδεμα στην αρχή ...

    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:]
  •  31-01-2008, 14:11 39750 σε απάντηση της 39749

    Απ: Asynchronous Page Tasks

    Αυτό είναι (είναι στα άρθρα του blog, όχι στα κύρια blog-sposts): http://www.dotnetzone.gr/cs/blogs/mkelaiditis/pages/10156.aspx 

    Είναι σε VB όμως... Αν θες βοήθεια στην μετάφραση του κώδικα μπορούμε να το κουβεντιάσουμε εδώ.


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems