Вызывает ли вызов Task.Wait () сразу после асинхронной операции эквивалентно выполнению этой же операции синхронно?
Другими словами, это
var task = SomeLongRunningOperationAsync();
task.Wait();
функционально идентичен
SomeLongRunningOperation();
Иными словами, это
var task = SomeOtherLongRunningOperationAsync();
var result = task.Result;
функционально идентичен
var result = SomeOtherLongRunningOperation();
В соответствии сTask.Wait and Inlining, если заданиеWait
Уже начал исполнение,Wait
должен заблокировать. Однако, если он не начал выполняться,Wait
может быть в состоянии извлечь целевую задачу из планировщика, к которому она была поставлена в очередь, и выполнить ее встроенным в текущем потоке.
Являются ли эти два случая просто вопросом о том, в каком потоке будет выполняться Задача, и если вы все равно ожидаете результата, имеет ли это значение?
Есть ли преимущество использования асинхронной формы по сравнению с синхронной формой, если между асинхронным вызовом иWait()
?