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#中实现这一目标?我想确保一步一步调用所有这些方法.
相关问题在评论中:
如何确保按顺序完全调用所有方法?
你提问的事实表明你不明白"等待"是什么. 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结果,因此它无法完成其他工作.