Task.Wait() zawiesza program.

0

Witam.

Próbuję nauczyć się obsługi 'Task'ów' w C#.
Naskrobałem coś takiego:

 Queue<Task> queue = new Queue<Task>();
            
            queue.Enqueue(new Task(() =>
            {
                for (int i = 0; i < 50; i++)
                {

                    richTextBox1.Invoke(new Action(delegate()
                    {
                        richTextBox1.Text += i.ToString() + "\n";
                        richTextBox1.SelectionStart = richTextBox1.Text.Length;
                        richTextBox1.ScrollToCaret();
                    }));
                }
            }));

            queue.Enqueue(new Task(() =>
            {

                for (int i = 100; i < 150; i++)
                {

                    richTextBox1.Invoke(new Action(delegate()
                    {
                        richTextBox1.Text += i.ToString() + "\n";
                        richTextBox1.SelectionStart = richTextBox1.Text.Length;
                        richTextBox1.ScrollToCaret();
                    }));
                }
            }));

            foreach (Task task in queue)
            {
                task.Start();
           //     task.Wait();
            }  

Program kompiluje się i uruchamia, jednak jeżeli odkomentuje task.Wait() żeby zadania wykonywały się poklei (czekając na zakończenie poprzedniego) program zawiesza się - dlaczego ?

0

Samo Task.Wait() nie powino "zawiesić" programu. Może za krótko czekałeś? Zmniejsz te pętle i zobacz jak długo się wykonuje jedna iteracja.

PS. Zdajesz sobie sprawę, że takie używanie tasków nie ma sensu?

0

Zmieniłem warunki tak że pętle wykonują tylko jeden "obrót" i nadal to samo.

Ps. Póki co to próby użycia Task w jakikolwiek sposób, bez większego sensu.

0

Prawdopodobnie zrobiłeś tutaj deadlock'a. Jeżeli odpalasz to w wątku UI, to Invoke czeka na udostępnienie wątku UI, ale ten jest blokowany przez Task.Wait()

Czytałem o tym, postaram się później o jakieś źródła (chyba że sam wcześniej znajdziesz ;))

1 użytkowników online, w tym zalogowanych: 0, gości: 1