Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Δεν σε καταλαβα.

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#, δικαιολογημενα μεν εφοσον δεν εχω πολυασχοληθει)

Δημοσ.

Δεν λες κάτι λάθος, απλά στόχος δεν είναι να καλέσει απλά την 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);
}

 

  • Like 1
Δημοσ.

 

Btw το await μέσα στο loop δεν είναι ότι καλύτερο γιατί μπορείς εύκολα να παραλληλίσεις τα tasks.

Να σου κατσει ενα τετοιο bug χαχαχαα άιντε να το βρεις χαχαχαχαχ

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...