Tytułem wprowadzenia:
Odczytuję sobie strumień danych. Wyciągam z niego kilka informacji, niestety pojawił się problem. Podczas odczytu może zdarzyć się, że strumień jest uszkodzony, ale jedynym sposobem, żeby to określić jest oczekiwanie na timeout paczki danych ze strumienia. Takich "paczek" może być nawet i 200, a optymalny timeout to 5s. Jeśli mam wyjątkowego pecha, to paczek uszkodzonych może być kilka i w efekcie odczyt przeciąga się, bo czytana jest paczka za paczką (pętla for). Dlatego w mojej głowie pojawiła się kwestia zaciągnięcia do pracy wątków - każdy odczyt jednej paczki byłby jednym wątkiem i wtedy (jeśli dobrze to obmyśliłem) byłbym w stanie czytać wszystko jednocześnie i cały proces w najgorszym przypadku trwałby 5s, jeśli akurat w strumieniu trafi się cokolwiek uszkodzonego, niezależnie ile tego będzie.
Problem:
Nie wiem ile tych wątków może być, ich ilość jest dynamiczna w zależności od badanego strumienia, może być 1, a może i 200. Dowiaduję się tego dopiero, gdy odczytam inny fragment strumienia (co robię w kodzie nieco wcześniej).
- muszę stworzyć dynamicznie wątek, wykonać w nim odczyt paczki i zaraz po wykonaniu tej operacji go zabić
- cała procedura musi czekać na zamknięcie wszystkich wątków
Jak się za to zabrać? Czego powinienem użyć i jakich przykładów szukać w sieci? Czy Parallel.For rozwiązałby problem?