括号中的异步会阻塞吗?(非文字表达)

Den*_*que 0 c# async-await

下面一行会...

var isAuthorized = (await _authorizationService.AuthorizeAsync(...)).Succeeded;
Run Code Online (Sandbox Code Playgroud)

...导致异步执行,在AuthorizeAsync(...)找到结果之前与调用者不同,还是会阻塞线程直到找到结果?为什么或者为什么不?

根据vb.net 的这个问题,这样的表达式被称为非文字。根据Fluently Calling Await without ParenthesesHow to Design Fluent Async Operations 的问题和答案,这个说法似乎没问题。但是,我想确定并从文档中了解原因,使这种特殊情况变得清晰。

Dor*_*aba 6

这里:

var object = _authorizationService.AuthorizeAsync(...)
Run Code Online (Sandbox Code Playgroud)

对象 = 任务本身。


这里:

var object = await _authorizationService.AuthorizeAsync(...)
Run Code Online (Sandbox Code Playgroud)

object = 任务的评估,也就是结果。


这里

var object = (await _authorizationService.AuthorizeAsync(...)).Succeeded;
Run Code Online (Sandbox Code Playgroud)

你在玩评价。(它不会阻塞任何东西,它不像使用_authorizationService.AuthorizeAsync(...).Result)。


这个:

var object = (await _authorizationService.AuthorizeAsync(...)).Succeeded
Run Code Online (Sandbox Code Playgroud)

是这样,但在一行中

var aux = await _authorizationService.AuthorizeAsync(...);
var object = aux.Succeeded;
Run Code Online (Sandbox Code Playgroud)