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!

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ć
TaskzamiastThread. - 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!

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
- Typy generyczne w C#
- Async i await: praca z kodem asynchronicznym
- Wątki i zadania
- Delegaty i lambdy
- Refleksja w C#