After reading the "new task completion source/set the result/return the Task" sequence a few times, I wonder if the code wouldn't benefit from having it pulled out to a private method that everyone can use.