Используйте System.Threading.Timer, он запустит задачу в потоке ThreadPoool. Это самый эффективный способ для этого.
Вот пример, каждые 10 секунд:
Timer aTimer = new System.Threading.Timer(MyTask, null, 0, 10000);
static void MyTask(object state)
{
...
}