Is there a way to Wait for a TPL Task without in throwing an exception?

You can't wait on a faulted task without raising an exception. But you can wait on a continuation to that task, which will complete only after the original task completed without raising an exception:

public static Task SwallowExceptions(this Task task)
{
    return task.ContinueWith(_ => { });
}

faultedTask.SwallowExceptions().Wait();
if (faultedTask.IsFaulted)
{
    // handle exception
}

If your task returns a value, you can represent that in the extensions method and return the actual value if there were no exceptions or the default value if there were:

public static Task<T> SwallowExceptions<T>(this Task<T> task)
{
    return task.ContinueWith(completedTask => 
        completedTask.IsFaulted 
            ? default(T) 
            : completedTask.Result);
}

You can use Task.WaitAny like:

        var task = Task.Run(() =>
        {
            // ...
            throw new Exception("Blah");
        });
        Task.WaitAny(task);
        if (task.IsFaulted)
        {
            var error = task.Exception;
            // ...
        }
        else if (task.IsCanceled)
        {
            // ...
        }
        else
        {
            // Success
        }

Unfortunately, this functionality is not built-in. Use this workaround:

 myTask.ContinueWith(_ => { }, TaskContinuationOptions.ExecuteSynchronously).Wait();

You can make this into an extension method.