[C#] Czekanie na zakończenie wątku

Witam

Zacznę od początku. Mam wiele folderów (maks 200). Wszystkie foldery mają identyczną strukturę wewnętrzną (oczywiście różnią się nazwami plików). Wygląda to tak:

│ ├───518063

│ │ └───data

│ │ └───images

│ │ ├───518063.1

│ │ ├───518063.2

│ │ ├───518063.3

│ │ ├───518063.4

│ │ ├───518063.5

│ │ ├───518063.6

│ │ └───tags

│ ├───518064

│ │ └───data

│ │ └───images

│ │ ├───518064.1

│ │ ├───518064.2

│ │ ├───518064.3

│ │ ├───518064.4

│ │ ├───518064.5

│ │ ├───518064.6

│ │ └───tags

Chcę teraz zrobić minimum 3 wątki, jeden będzie kompresował pliki w folderze data, drugi wątek będzie tylko kopiował pliki z folderu tags, trzeci lub więcej wątków będą konwertować zdjęcia z PNG na JPG zawarte w folderach które znajdują się w images. Widziałem to tak żeby zrobić to w pętli gdzie pobiorę listę folderów, a następnie dla tych 3 podfolderów wywołam wątki i poczekam na ich zakończenie zanim wejdę w kolejny obrót pętli i zacznę obrabiać kolejny folder (np. 518064).

Jak poczekać na koniec wątku? Dodatkowo myślałem czy nie zrobić tego tak że zrobić 3 pętle wykonujące się niezależnie (wychodzi na to że w trzech kolejnych wątkach), dałoby mi to tyle że nie musiałbym czekać na wątek konwertujący zdjęcia tylko mógłbym dalej kompresować pliki z data i kopiować pliki z tags przez co zaoszczędziłbym czas. Zrozumiał ktoś w ogóle co chcę osiągnąć i może pomóc?

Z tego co zrozumiałem, chcesz się dowiedzieć, że wątek już się zakończył. Ja po prostu wysyłam z wątku komunikat do okienka w głównym wątku (jeżeli aplikacja jest okienkowa) i wiem że się skończył. Działa dobrze, ale nie wiem czy jest to całkiem prawidłowe rozwiązanie.

Czekanie na zakończenie wątku: Thread.Join

Zadania na osobnych wątkach: TPL