c# - 在异步方法内部调用时,方法是否必须是异步的?

标签 c# .net asynchronous

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

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/

相关文章:

Javascript (Modernizr/YepNope.js) 语法和用法

javascript - 如何在 UI5 中等待 JSONModel.loadData() 请求

C#/.NET 等同于 Java 的 Matcher.matches() 和 Matcher.lookingAt()

c# - 如何使用 Entity Framework 调用标量值函数并获取结果

java - 安卓 : Get data in real-time instead of using Async-Task

c# - 连接失败后 FtpWebRequest 不继续

c# - C# 中的 ref 参数

c# - C#连接数据库的方法

c# - 在现有 MVC5 Azure WebApp 中添加其他项目(博客引擎)

c# - 如何使用 LDAP 在本地网络中共享文件夹