If you have to use a task, you can try adopting this, pay attention to the last 3 parameters, they might not suit your requirements.
Task.Factory.StartNew(
() =>
WriteMessageInBackground(invoicesIn.Split(','), _messageController, chkSms.Checked,
chkEmail.Checked, messageTemplate),
CancellationToken.None,
TaskCreationOptions.PreferFairness,
TaskScheduler.Default);
It returns straight away, but its important to understand, that the WriteMessageInBackground method is simply bulk writing the messages into a table, we have another component that's picking them up for sending, as the mail server, in particular likes to take its own damn time some days.
As mentioned in the comments, if this job is really long running, it really needs to be handed off to something other than a website to run it.