The generally accepted way is 3.
Users of TPL generally know that they can continue a Task with ContinueWith. 1 and 2 provide the same functionality, but with a non-standard interface; the user has to figure out what the delegate parameter means and what to pass e.g. if they don’t want to continue — all that while the method still returns a Task that can be continued in the standard way.