草庐IT

await-async

全部标签

c# - 使用 `async` lambda 和 `Task.Run()` 是多余的吗?

我刚遇到一些代码,例如:vartask=Task.Run(async()=>{awaitFoo.StartAsync();});task.Wait();(不,我不知道Foo.StartAsync()的内部工作原理)。我最初的react是摆脱async/await并重写为:vartask=Foo.StartAsync();task.Wait();这是否正确(同样,对Foo.StartAsync()一无所知)。This回答Whatdifferencedoesitmake-runningan'async'actiondelegatewithaTask.Run...似乎表明在某些情况下它可能有

c# - 使用 async/await 进行设计——一切都应该是异步的吗?

假设我有一个接口(interface)方法实现为publicvoidDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);}一段时间后我意识到我想改变它:publicasyncTaskDoSomething(Useruser){if(user.Gold>1000)ChatManager.Send(user,"Youarerich:"+user.Gold);if(!user.HasReward){using(vardbConnection=awaitDbPool.Ope

c# - 由非托管应用托管的托管组件中的 Await 和 SynchronizationContext

[已编辑]Thisappearstobeabug在框架的实现中Application.DoEvents,我已报告here.在UI线程上恢复错误的同步上下文可能会严重影响像我这样的组件开发人员。赏金的目的是让更多人关注这个问题,并奖励@MattSmith,他的回答帮助追踪了这个问题。我负责通过COM互操作将基于.NETWinFormsUserControl的组件作为ActiveX公开给遗留非托管应用。运行时要求是.NET4.0+Microsoft.Bcl.Async。组件在应用的主STAUI线程上被实例化和使用。它的实现利用了async/await,因此它期望在当前线程上安装了一个序列化

javascript - this.async() 在 JavaScript 中做了什么

一直在代码中看到这种模式,但在谷歌或SO中找不到任何对它的引用,很奇怪。有人可以指出this.async()函数的引用吗?vardone=this.async();//...$.get(path,function(contents){//orsomeotherfunctionwithcallback//...done(JST[path]=tmpl);}) 最佳答案 vardone=this.async()和done(blah)是一个巧妙的技巧,可以返回从异步调用中获取的值(例如$.get)在一个同步函数中。让我们看一个例子:varg

javascript - RxJs 中是否有 "async"版本的过滤器运算符?

我需要通过针对某些Web服务检查条目来过滤由observable发出的条目。普通的observable.filter运算符在这里不适用,因为它期望谓词函数同步返回判定,但在这种情况下,只能异步检索判定。我可以通过以下代码进行转换,但我想知道是否有一些更好的运算符可以用于这种情况。someObservable.flatmap(function(entry){returnRx.Observable.fromNodeCallback(someAsynCheckFunc)(entry).map(function(verdict){return{verdict:verdict,entry:ent

javascript - 使用 Async/Await 获取 API 'POST' 的正确方法

我正在从事一个需要我向API发出请求的项目。使用Async/Await发出POST请求的正确形式是什么?例如,这是我获取所有设备列表的请求。我将如何将此请求更改为POST以创建新设备?我知道我必须添加带有数据主体的header。getDevices=async()=>{constlocation=window.location.hostname;constresponse=awaitfetch(`http://${location}:9000/api/sensors/`);constdata=awaitresponse.json();if(response.status!==200)t

javascript - 在 Promise 中使用 await

必须将Promise的回调定义为异步似乎存在一些固有的错误:returnnewPromise(async(resolve,reject)=>{constvalue=awaitsomethingAsynchronous();if(value===something){returnresolve('Itworked!');}else{returnreject('Nope.Tryagain.');}});这显然是一个antipattern还有编码problemswhichcanarisefromit.我知道即使在try/catchblock中放置await语句,也更容易在这里捕获错误。我的第

javascript - 当关键字后的表达式未计算为 promise 时, `await` 会发生什么情况?

我有这样的ES7代码。asyncfunctionreturnsfive(){varthree=3;varthreeP=awaitthree;returnthreeP+2;}returnsfive().then(k=>console.log(k),e=>console.error("err",e))varthreeP=awaitthree行应该发生什么?代码应该按预期继续,还是失败,因为three不是一个promise?在thisrepo,它被称为“有争议的语法和语义”。我无法通读官方文档来找到确切的定义,因为它太技术化了。默认的babel.js转换按预期记录5;然而,nodent-一个

javascript - JavaScript `await` 什么时候真正等待?

我正在阅读thisarticle,并想知道为什么在第一个片段中第二个wait()等待第一个wait()完成,而在第二个片段中两个wait()运行异步?asyncfunctionseries(){awaitwait(500);awaitwait(500);return"done!";}asyncfunctionparallel(){constwait1=wait(500);constwait2=wait(500);awaitwait1;awaitwait2;return"done!";}functionwait(ms){returnnewPromise(r=>setTimeout(r,m

javascript - 在某些情况下省略 'await' 是否合法?

我在我的代码中的几个地方使用了async/await。例如,如果我有这个功能:asyncfunctionfunc(x){...returny;}那么我总是这样调用它:asyncfunctionfunc2(x){lety=awaitfunc(x);...}我注意到在某些情况下,我可以省略await并且程序仍会正确运行,所以我不太清楚什么时候必须使用await和当我可以放下它的时候。我得出的结论是,仅在return语句中直接删除await是“合法的”。例如:asyncfunctionfunc2(x){...returnfunc(x);//insteadofreturnawaitfunc(x