加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 与异步调用在同一行上等待的实际用法?

发布时间:2020-12-15 08:08:26 所属栏目:百科 来源:网络整理
导读:在同一行上使用await调用异步方法的目的是什么? (不是什么行为,但这种模式的实际用途是什么).据我所知,这实际上是一个同步的“阻塞”调用,因为在此上下文中的执行在GetDocumentAsync完成之前不会继续,对吗? Document someDocument = await db.GetDocumentA
在同一行上使用await调用异步方法的目的是什么? (不是什么行为,但这种模式的实际用途是什么).据我所知,这实际上是一个同步的“阻塞”调用,因为在此上下文中的执行在GetDocumentAsync完成之前不会继续,对吗?
Document someDocument = await db.GetDocumentAsync(documentId);
//AFAIK blocks until GetdocumentAsync completes and returns 
CalledAfterAwaitReturnsAndResultIsAvailable(someDocument.SomeProperty);

大多数教程展示了如何调用我见过的异步方法,并且我已经在其他代码中看到了它.对我而言,它违背了异步执行的目的.看起来好像从异步调用中受益,你可以在没有await的情况下进行异步调用,并做一些其他不相关的顺序工作(或者启动一些其他异步调用)而不依赖于someDocument,然后进行等待获取异步调用的结果,然后做任何依赖于该返回的事情.这样,当异步调用也在另一个线程中工作时,可以执行其他不相关的处理.我已经看到了上述模式,我开始怀疑我是否误解了一些东西.

以这种方式进行异步调用的实际应用是什么,这样它就会阻塞直到它完成?

解决方法

我认为你缺少的关键是当你点击第一个等待时,你在里面的函数返回一个Task< Document> (假设您的函数被声明为public async Task< Document> Foo())并让调用函数的人继续做其他工作.

然后调用者可以处理其他一些工作并稍后检查任务以查看它是否已完成,或者他可以立即等待他自己并继续延期工作直到你找到有工作要做的人(在Forms或WPF上)这一直到消息泵,并让你在等待任务完成时继续响应.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读