I think Windows service is the best way.
Other than this you may be able to set the IIS App Pool not to recycle and start some worker threads that will perform the task on a specified time interval.
Choosing the second will probably be better once you get it right but it will have to do with the IIS infrastructure so you will need set up the IIS each time you deploy your application on a new server.
If someone doesn't suggest something more clever - I will suggest Windows Service (be careful when deploying it and be sure to set CanStop to true to avoid the need to restart the server at a later deployment :) and some medium (IPC communication, DB, simple file / xml, WCF Service on the Windows Service side or MSMQ) to exchange data between the Web App and the Windows Service.
So to answer your question - you can do it both ways theoretically but the Windows Service seems to be more reliable and safe (you won't need to somehow instruct IIS to never kill your Web Process).