παπι Δημοσ. 30 Ιουνίου 2013 Δημοσ. 30 Ιουνίου 2013 Δεν σε καταλαβα. private async void button1_Click(object sender, EventArgs e) { button1.Enabled = false; for (int i = 0; i < 10; i++) { await Task.Delay(100); label1.Text = i.ToString(); } button1.Enabled = true; } Στο παραπανω, ο caller δεν θα παρει την ροη του προγραμματος με το που θα φτασει στο await; Το label1.Text = i.ToString() δεν υποτιθεται οτι ειναι ενα callback που θα κληθει οταν το await τελειωσει, και το button1.Enabled = true δεν υποτιθεται οτι ειναι αλλο callback το οποιο θα κληθει οταν τελειωσει η for; Για ποιο λογο να φτιαξεις αλλο callback εφοσον στα φτιαχνει η c#; (εκτος και αν δεν εχω καταλαβει ακριβως πως δουλευει το async στη c#, δικαιολογημενα μεν εφοσον δεν εχω πολυασχοληθει)
Portmaster Δημοσ. 1 Ιουλίου 2013 Δημοσ. 1 Ιουλίου 2013 Δεν λες κάτι λάθος, απλά στόχος δεν είναι να καλέσει απλά την Delay αλλά ένα function δικό του που κάνει συγκεκριμένη δουλεία και επιστρέφει ένα task. Στο παράδειγμα που έδωσα φαίνεται πως μπορείς εύκολα να ενημερώσεις τα controls στο ui thread.Btw το await μέσα στο loop δεν είναι ότι καλύτερο γιατί μπορείς εύκολα να παραλληλίσεις τα tasks. public Task worker(IProgress<int> progress) { var tasks = new List<Task>(); for (int i = 0; i < 20000; i++) tasks.Add(Task.Delay(100) .ContinueWith(_ => progress.Report(i))); return Task.WhenAll(tasks); } 1
παπι Δημοσ. 1 Ιουλίου 2013 Δημοσ. 1 Ιουλίου 2013 Btw το await μέσα στο loop δεν είναι ότι καλύτερο γιατί μπορείς εύκολα να παραλληλίσεις τα tasks. Να σου κατσει ενα τετοιο bug χαχαχαα άιντε να το βρεις χαχαχαχαχ
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα