0Pricing
C# Academy · Lekcja

Wątki i zadania

Poznaj wątki i zadania służące do zarządzania przetwarzaniem równoległym w języku C#

Wątki i zadania to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 3 z 5. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 5 lekcji w sumie.

Wprowadzenie do wątków i zadań

Zrozumienie wątków i zadań

Witamy w kolejnej lekcji! W tej lekcji poznają Państwo wątki i zadania w języku C#, które umożliwiają równoczesne wykonywanie wielu operacji w celu zwiększenia wydajności. Zaczynajmy!

Wątki i zadania — ilustracja 1

Czym jest wielowątkowość

Czym jest wielowątkowość?

Wielowątkowość to proces jednoczesnego wykonywania wielu operacji. Każdy wątek reprezentuje oddzielny przepływ sterowania w aplikacji.

Najważniejsza informacja: Wielowątkowość poprawia wydajność dzięki wykorzystaniu wielu rdzeni procesora do równoczesnego wykonywania operacji.

Tworzenie i uruchamianie wątków

Tworzenie i uruchamianie wątków

Wątki można tworzyć i uruchamiać za pomocą klasy Thread. Przykład:

using System;
using System.Threading;

class Program {
    static void Main() {
        Thread thread = new Thread(PrintNumbers);
        thread.Start();

        Console.WriteLine("Main thread is running...");
    }

    static void PrintNumbers() {
        for (int i = 1; i <= 5; i++) {
            Console.WriteLine(i);
            Thread.Sleep(1000); // Pause for 1 second
        }
    }
}

Wprowadzenie do zadań

Wprowadzenie do zadań

Zadania zapewniają abstrakcję wyższego poziomu dla programowania współbieżnego w porównaniu z wątkami. Klasa Task jest częścią biblioteki Task Parallel Library (TPL) w języku C#.

Przykład: Tworzenie i uruchamianie zadania:

Wskazówka: Zadaniami łatwiej zarządzać, a także zapewniają lepszą obsługę błędów niż wątki.

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        Task task = Task.Run(() => {
            for (int i = 1; i <= 5; i++) {
                Console.WriteLine(i);
                Task.Delay(1000).Wait();
            }
        });

        Console.WriteLine("Main thread is running...");
        task.Wait(); // Wait for the task to complete
    }
}

Używanie Parallel.For i Parallel.ForEach

Używanie Parallel.For i Parallel.ForEach

Klasa Parallel w języku C# umożliwia równoległe wykonywanie pętli w celu zwiększenia wydajności. Przykład:

Najważniejsza informacja: Proszę używać Parallel.For i Parallel.ForEach w przypadku zadań intensywnie przetwarzających dane, które można wykonywać współbieżnie.

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        Parallel.For(0, 5, i => {
            Console.WriteLine($"Processing {i} on thread {Task.CurrentId}");
        });

        Console.WriteLine("All tasks completed.");
    }
}

Obsługa wyjątków w zadaniach

Obsługa wyjątków w zadaniach

Wyjątki w zadaniach można przechwytywać za pomocą bloku try-catch lub właściwości Task.Exception. Przykład:

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        try {
            Task task = Task.Run(() => {
                throw new InvalidOperationException("Task failed!");
            });

            task.Wait();
        } catch (AggregateException ex) {
            Console.WriteLine("Error: " + ex.InnerException.Message);
        }
    }
}

Zadanie praktyczne

Zadanie praktyczne

Proszę utworzyć program, który uruchamia wiele zadań w celu równoległego przetwarzania liczb i wyświetla ich kwadraty. Przykład:

using System;
using System.Threading.Tasks;

class Program {
    static void Main() {
        int[] numbers = { 1, 2, 3, 4, 5 };

        Parallel.ForEach(numbers, number => {
            Console.WriteLine($"Square of {number}: {number * number}");
        });
    }
}

Najlepsze praktyki dotyczące wątków i zadań

Najlepsze praktyki dotyczące wątków i zadań

Oto kilka najlepszych praktyk:

  • W przypadku współbieżności wysokiego poziomu proszę wybierać Task zamiast Thread.
  • W przypadku operacji intensywnie przetwarzających dane proszę używać klas Parallel.
  • Proszę prawidłowo obsługiwać wyjątki, aby zapewnić niezawodność aplikacji.
  • Proszę ograniczać liczbę wątków lub zadań, aby unikać rywalizacji o zasoby.

Wskazówka: Proszę używać programowania asynchronicznego, gdy dominują operacje wejścia-wyjścia, a wątków i zadań — w przypadku zadań wymagających dużej mocy obliczeniowej procesora.

Świetna robota!

Świetna robota!

Gratulacje! Poznali się Państwo z podstawami wątków i zadań używanych w programowaniu współbieżnym w języku C#. W następnej lekcji zagłębią się Państwo w delegaty i wyrażenia lambda — dwie zaawansowane funkcje używane w programowaniu funkcyjnym. Proszę kontynuować naukę programowania!

Wątki i zadania — ilustracja 10

Często zadawane pytania

Czy lekcja „Wątki i zadania” jest bezpłatna?

Tak — pełny tekst „Wątki i zadania” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 5 lekcji w sumie.

Co nauczysz się w „Wątki i zadania”?

Poznaj wątki i zadania służące do zarządzania przetwarzaniem równoległym w języku C# Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 5.

Ile czasu zajmuje lekcja „Wątki i zadania”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Typy generyczne w C#
  2. Async i await: praca z kodem asynchronicznym
  3. Wątki i zadania
  4. Delegaty i lambdy
  5. Refleksja w C#
← Powrót do C# Academy