Ответ 1
Да, существует решающее различие: Task.Factory.StartNew
не сохраняет контекст синхронизации, тогда как при использовании async/await этот контекст сохраняется. Например, в приложении ASP.NET это означает, что если вы используете Task.Factory.StartNew
, HttpContext может быть недоступен внутри задачи, тогда как если вы используете async/await, он будет доступен.
Там также есть еще одно важное отличие от приведенного вами примера. В первом случае вы используете блокирующий API: File.ReadAllText(path)
, тогда как во втором случае вы используете порт завершения ввода-вывода с истинной асинхронной операцией ввода-вывода. Это означает, что в первом случае вы ставите под угрозу поток, на котором эта задача выполняется в течение всего времени выполнения этой задачи, тогда как во втором случае этот поток является бесплатным благодаря порту завершения ввода/вывода.