1. Both methods do almost the same. Second one is recommended if you do not need to specify TaskCreationOptions or TaskContinuationOptions or TaskScheduler.
For more details you can read
StartNew is Dangerous[
^]
and
c# - What is the difference between Task.Run() and Task.Factory.StartNew() - Stack Overflow[
^]
2. I do not see any disadvantages in returning Task as a result in WPF.
If you need to interact with UI in your methods you have to use Dispatcher. Is it what you are asking?
If you share some examples of your code I can be more specific in my answer.