Questions tagged «async-await»

这涵盖了使用async和await关键字的各种编程语言支持的异步编程模型。

10
异步功能+等待+ setTimeout的组合
我正在尝试使用新的异步功能,希望解决我的问题以后能对其他人有所帮助。这是我的代码正在工作: async function asyncGenerator() { // other code while (goOn) { // other code var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); // other code } // other code } function listFiles(token) { return gapi.client.drive.files.list({ 'maxResults': sizeResults, 'pageToken': token, 'q': query }); } 问题是我的while循环运行得太快,脚本每秒向Google API发送太多请求。因此,我想构建一个睡眠函数以延迟请求。因此,我也可以使用此功能来延迟其他请求。如果还有其他方法可以延迟请求,请告诉我。 无论如何,这是我的新代码不起作用。请求的响应在setTimeout中返回给匿名异步函数,但是我只是不知道如何将响应返回给睡眠函数resp。到初始asyncGenerator函数。 async function …

3
您是否必须将Task.Run放入一个使它异步的方法中?
我试图以最简单的形式理解异步等待。为了这个示例,我想创建一个非常简单的方法,将两个数字相加,这是完全没有时间的,这只是在此处举例说明而已。 例子1 private async Task DoWork1Async() { int result = 1 + 2; } 例子2 private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); } 如果我等待DoWork1Async(),代码将同步还是异步运行? 是否需要包装同步代码Task.Run以使该方法可以等待和异步,以免阻塞UI线程? 我试图弄清楚我的方法是a Task还是return Task<T>,是否需要包装代码Task.Run以使其异步。 我确定是愚蠢的问题,但我在网上看到的示例中,人们正在等待代码,这些代码中没有异步内容并且没有包装在Task.Runor中StartNew。

6
捕获异步void方法引发的异常
使用Microsoft .NET的异步CTP,是否可以在调用方法中捕获由异步方法引发的异常? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ } public void DoFoo() { try { Foo(); …

8
运行多个异步任务并等待它们全部完成
我需要在控制台应用程序中运行多个异步任务,并等待它们全部完成再进行进一步处理。 那里有很多文章,但是我阅读的内容似乎越来越困惑。我已经阅读并理解了任务库的基本原理,但是显然我在某处缺少链接。 我知道可以链接任务,以便它们在另一个任务完成之后开始(这是我阅读的所有文章的场景),但是我希望所有任务同时运行,我想知道一次他们都完成了。 对于这种情况,最简单的实现是什么?

7
C#中“返回等待”的目的是什么?
有没有这样的编写方法的场景: public async Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return await DoAnotherThingAsync(); } 代替这个: public Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return DoAnotherThingAsync(); } 会有意义吗? return await当您可以直接Task<T>从内部DoAnotherThingAsync()调用返回时,为什么要使用struct? 我return await在很多地方都看到过代码,我想我可能错过了一些东西。但是据我了解,在这种情况下不使用async / await关键字,而直接返回Task的功能是等效的。为什么要增加额外await层的额外开销?
251 c#  .net  .net-4.5  async-await 

11
如果async-await不创建任何其他线程,那么它如何使应用程序响应?
一次又一次,我看到它说使用async- await不会创建任何其他线程。这是没有道理的,因为一台计算机似乎一次只能完成一件事情的唯一方法是 实际上一次执行一件以上的事情(并行执行,使用多个处理器) 通过计划任务并在它们之间进行切换来模拟它(执行一点A,一点B,一点A等) 因此,如果async- await这些都不起作用,那么如何使应用程序响应呢?如果只有1个线程,则调用任何方法都意味着先等待该方法完成,然后再执行其他操作,并且该方法内的方法必须等待结果之后再进行操作,依此类推。

10
等待具有不同结果的多个任务
我有3个任务: private async Task<Cat> FeedCat() {} private async Task<House> SellHouse() {} private async Task<Tesla> BuyCar() {} 它们都需要先运行,然后我的代码才能继续,我也需要它们的结果。没有结果有什么共同点 如何调用并等待3个任务完成然后获得结果?

2
异步编程和多线程有什么区别?
我认为它们基本上是同一回事–编写在处理器之间(在具有2个以上处理器的机器上)将任务分割的程序。然后,我正在阅读this,它说: 异步方法旨在作为非阻塞操作。在等待任务运行时,异步方法中的等待表达式不会阻塞当前线程。取而代之的是,表达式将方法的其余部分作为继续进行签名,并将控制权返回给异步方法的调用者。 async和await关键字不会导致创建其他线程。异步方法不需要多线程,因为异步方法不会在自己的线程上运行。该方法在当前同步上下文上运行,并且仅在该方法处于活动状态时才在线程上使用时间。您可以使用Task.Run将受CPU约束的工作移至后台线程,但是后台线程对仅等待结果可用的进程没有帮助。 我想知道是否有人可以帮我翻译成英文。似乎在异步性(是一个词?)和线程之间进行了区分,这意味着您可以拥有一个具有异步任务但没有多线程的程序。 现在,我了解了异步任务的想法,例如pg上的示例。乔恩·斯基特(Jon Skeet)的《C#深度》第 467页,第三版 async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } } 该async关键字的意思是“ 这个功能,无论何时它被调用时,不会在这是需要的一切它的完成被称为它的呼叫后,上下文调用。” 换句话说,将其写在某些任务的中间 int x = …

12
同步调用异步方法
我有一个async方法: public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; } 我需要从同步方法中调用此方法。 我如何才能做到这一点而不必重复GenerateCodeAsync方法以使其同步工作? 更新资料 但找不到合理的解决方案。 但是,我看到HttpClient已经实现了这种模式 using (HttpClient client = new HttpClient()) { // async HttpResponseMessage responseAsync = await client.GetAsync(url); // sync HttpResponseMessage responseSync = client.GetAsync(url).Result; }

4
什么时候使用Task.Yield()?
我正在使用async / await和Task很多东西,但是Task.Yield()即使有所有的解释,我也从未使用过,说实话,我不明白为什么我需要这种方法。 有人可以在Yield()需要的地方举一个很好的例子吗?
218 c#  async-await 

2
我在哪里标记lambda表达式异步?
我有以下代码: private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args) { CheckBox ckbx = null; if (sender is CheckBox) { ckbx = sender as CheckBox; } if (null == ckbx) { return; } string groupName = ckbx.Content.ToString(); var contextMenu = new PopupMenu(); // Add a command to edit the current Group contextMenu.Commands.Add(new …

8
什么时候应该在ASP.NET MVC中使用异步控制器?
我在ASP.NET MVC中使用异步操作时有些担心。什么时候可以改善我的应用程序的性能,什么时候不可以? 在ASP.NET MVC的任何地方使用异步操作是否很好? 关于等待方法:当我要查询数据库时(通过EF / NHibernate /其他ORM),我应该使用async / await关键字吗? 一个单一的操作方法可以使用await关键字异步查询数据库多少次?

6
Task.Start / Wait和Async / Await有什么区别?
我可能会丢失一些东西,但是这样做之间有什么区别: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComplete(); } public async void MyMethod() { var result = Task.Factory.StartNew(DoSomethingThatTakesTime); await result; UpdateLabelToSayItsComplete(); } private void DoSomethingThatTakesTime() { Thread.Sleep(10000); }


3
如何在C#中创建异步方法?
我读过的每篇博客文章都告诉您如何使用C#使用异步方法,但是出于某些奇怪的原因,请不要解释如何构建自己的异步方法来使用。因此,我现在拥有使用我的方法的这段代码: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } 我写的这个方法是CountToAsync: private Task<DateTime> CountToAsync(int num = 1000) { return Task.Factory.StartNew(() => { for (int i = 0; i < num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x => DateTime.Now); } 这是使用Task.Factory,是编写异步方法的最佳方法,还是应该以其他方式编写?
196 c#  async-await  c#-5.0 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.