从我的理解主要事情之一async和await要做的就是让代码易于读写-但使用它们等于产卵后台线程来执行持续时间长的逻辑?
我正在尝试最基本的例子.我在内联添加了一些评论.你能为我澄清一下吗?
// I don't understand why this method must be marked as `async`.
private async void button1_Click(object sender, EventArgs e)
{
Task<int> access = DoSomethingAsync();
// task independent stuff here
// this line is reached after the 5 seconds sleep from
// DoSomethingAsync() method. Shouldn't it be reached immediately?
int a = 1;
// from my understanding the waiting should be done here.
int x = await access;
}
async Task<int> DoSomethingAsync()
{
// is …Run Code Online (Sandbox Code Playgroud) 所以我在想ok节点是异步的(意味着多行代码同时执行),那么为什么我们使用关键字async(字面意思是异步)来等待关键字await来完成任务(也就是使它是同步的)。为什么没有关键字sync,因为这就是我们正在做的事情?有人可以解释一下关键字 async 的逻辑吗?我感到很困惑。
我实际上是第一次深入了解 asyc/await 部分,所以我很难理解它。
我知道 async wait 用于使函数以异步方式运行,但是如何,因为根据定义,“await”关键字会暂停函数的执行,直到承诺得到解决,然后执行中的剩余代码功能。这不是同步行为吗,因为事情正在按应有的顺序执行?
如果我有什么地方错了,请随时帮助我摆脱困惑。
我对有关承诺的某些部分感到困惑,我读过多篇文章,看过多个视频,我想问一些事情:
据我目前的了解,当创建承诺时就开始运行。
如果代码中未使用从承诺返回的值,我是否需要等待承诺?
一个场景是:假设我正在系统中处理一个任务,并且我想将信息记录到 mongodb,当我调用插入函数时,我会得到一个承诺。执行存在,但我不关心它的结果
如果我不等待并且出现错误,我将无法处理它。
上述问题的后续问题:
从我读到的内容来看,await它实际上阻止了异步函数的执行,但是如果它阻止了函数的执行,它怎么不会阻止事件循环的其余部分?
我一直在阅读 Node.js 中的 async/await。我了解到await关键字等待承诺得到解决,或者如果被拒绝则抛出异常。
我还了解到,每个想要使用的功能都await需要标记async。但是,函数被标记为 async 意味着什么?
我能找到的所有资源和博客文章似乎都await非常详细地解释了,但忽略了函数的概念async,或者简单地掩盖了它。例如,笔者是这样表述的:
这使得函数隐式返回一个 Promise。
async关键字的真正作用是什么?函数隐式返回 Promise 意味着什么?除了可以使用之外还有什么副作用await?
好吧,从我迄今为止收到的答案来看,很明显它只是将函数的返回值包装到 a 中Promise,就像那样Promise.then。但这留下了一个新问题。为什么使用的函数await需要async返回 a Promise?
async-await ×4
javascript ×4
asynchronous ×3
node.js ×3
.net ×1
c# ×1
es6-promise ×1
promise ×1
typescript ×1