在异步方法中调用时,方法是否必须是异步的?

Exp*_*nie 1 .net c# asynchronous

假设我有一个定义如下的方法:

public async Task CreateUser()
{
   await GetUserDetails();
   GetUserOrder();
}

private void GetUserDetails() {

private void GetUserOrder() {
Run Code Online (Sandbox Code Playgroud)

请问方法GetUserDetails();GetUserOrder()必须async,以及避免UI拦截?

我不能await这个GetUserDetails()方法因为它不是异步的.我怎样才能在c#中实现这一目标?我想确保一步一步调用所有这些方法.

Eri*_*ert 7

相关问题在评论中:

如何确保按顺序完全调用所有方法?

你提问的事实表明你不明白"等待"是什么. Await是异步工作流的排序操作.这await意味着在等待任务完成之前,此工作流程不会继续.这是一个异步等待,因此得名await.

考虑这个问题:在同步工作流程中,排序操作是什么?

不,真的,给它一些思考.

.

.

.

是的;.当你说

fResult = foo();
bResult = bar();
qResult = qux();
Run Code Online (Sandbox Code Playgroud)

这意味着foo必须在bar开始之前完全完成. 异步工作流程并非如此.如果我们有

fTask = fooAsync();
bTask = barAsync();
qTask = quxAsync();
Run Code Online (Sandbox Code Playgroud)

然后异步操作可以按任何顺序完成.如果我们说

await fooAsync();
await barAsync();
await quxAsync();
Run Code Online (Sandbox Code Playgroud)

然后barAsync将不会启动,直到fooAsync的任务完成. 对异步工作流进行await 排序 区别在于线程可以在异步等待foo完成时继续执行其他不相关的工作,这在同步工作流中是不正确的; 在同步工作流中,线程已经忙于计算foo结果,因此它无法完成其他工作.