Как организовать отказоустойчивую распределённую обработку заданий?
1. Зачем вам база данных если все делается в одном приложении. В БД сохраняйте только при закрытии приложения и считывайте единожды при запуске.
2. Сделайте менеджер заданий, пусть он потокам отдает новые, если новый нет то потоки повесить на ожидание ивента. Пришло что-то выставили ивент в сигнальное состояние. Потоки запустились. Отмечать выполнение задания тамже. Пока задание выполняется можно сохранить обьект на поток в котором задание выполняется. Если поток аварийно завершиться, то менеджер сможет проверить состояние потока через thread.Join(10). Поток мертв, скидываем флаг задания.
Делал ради скуки подобную систему на базе sharpmq. Вышло удачно вроде.