Вы можете обрабатывать исключения в задаче, используя метод `.ContinueWith ':
Task.Factory.StartNew(() => {
// Do some long action
Thread.SpinWait(5000000);
// that eventually has an error :-(
throw new Exception("Something really bad happened in the task.");
// I'm not sure how much `TaskCreationOptions.LongRunning` helps, but it sounds
// like it makes sense to use it in your situation.
}, TaskCreationOptions.LongRunning).ContinueWith(task => {
var exception = task.Exception;
/* Log the exception */
}, TaskContinuationOptions.OnlyOnFaulted); // Only run the continuation if there was an error in the original task.