假设我有一个定义如下的方法:
public async Task CreateUser()
{
await GetUserDetails();
GetUserOrder();
}
private void GetUserDetails() {
private void GetUserOrder() {
方法 GetUserDetails();
和 GetUserOrder()
是否也必须是 async
以避免 UI 阻塞?
我无法await
GetUserDetails()
方法,因为它不是异步的。我怎样才能在 c# 中实现这一点?我想确保所有这些方法都被逐步调用。
最佳答案
相关问题在评论中:
How can I ensure all my methods are invoked completely sequentially?
您问这个问题表明您不了解“等待”是什么。 Await 是对异步工作流的排序操作。 await
表示在等待的任务完成之前不会继续此工作流。这是一个异步等待,因此得名await
。
考虑这个问题:在同步工作流中,什么是排序操作?
不,真的,考虑一下。
.
.
.
它是;
。当你说
fResult = foo();
bResult = bar();
qResult = qux();
这意味着 foo 必须在 bar 开始之前完全结束。 异步工作流程并非如此。如果我们有
fTask = fooAsync();
bTask = barAsync();
qTask = quxAsync();
然后异步操作可以按任何顺序完成。如果我们说
await fooAsync();
await barAsync();
await quxAsync();
然后 barAsync 将不会启动,直到 fooAsync 的任务完成。 await
排序 异步工作流。不同之处在于,线程可以在异步等待 foo 完成的同时继续做其他不相关的工作,这在同步工作流中是不正确的;在同步工作流中,线程已经忙于计算 foo 结果,因此它无法执行其他工作。
关于c# - 在异步方法内部调用时,方法是否必须是异步的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598623/