Я унаследовал многопоточную службу Windows (C #, .NET) без поддержки неисключенных исключений.Сервис использует несколько потоков для сбора данных с телеметрических устройств для анализа.Поток в этом сервисе может работать 24 часа и более.Я борюсь с тем, как сообщить основному потоку, что поток испытывает проблемы и должен быть переработан.Вот упрощенное представление кода:
class Program
{
static void Main(string[] args)
{
var workerObject = new WorkerObject();
var workerThread = new Thread(workerObject.DoWork);
workerThread.Start()
}
}
class WorkerObject
{
//todo: My fields and properties go here
public void DoWork()
{
const int timeout = 100;
//todo: setup wait handles here
try
{
//Start monitoring channels for this device
while (true)
{
// Wait on any waithandle or timeout once per decisecond.
int channelIndex = WaitHandle.WaitAny(waitHandles, timeout, false);
//todo: process incoming data for this channel
}
}
//Catch all exceptions so we can notify mommy that we're in a bad way
catch (Exception ex)
{
//todo: log anything that can help us figure this problem out
//How do I tell the main thread I've failed
}
finally
{
//But of course we want to clean up after ourselves
}
}
}
Это даже лучший механизм потоков .NET для использования?Стоит ли вместо этого использовать Async Delegates или Task Parallel Library?