What you are trying to achieve is perfectly doable with background service. As you can use, the ExecuteAsync method of the background service, you will be using infinite loop to execute your logic.
In the loop, you may add your business logic, for e.g. when the user request an export task, you may write the entry to a database and your background task will check the existance of such an entry and process it.
e.g.
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// First check whether there is a job
if(JobExists())
{
// write code here to do the export task
}
// The wait time to check for the jobs... you may define it as per your needs
await Task.Delay(TimeSpan.FromMinutes(5));
}
}