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