Questions tagged «asynchronous»

异步编程是一种用于延迟具有高延迟或低优先级的操作的策略,通常是为了提高软件的性能,响应能力和/或可组合性。通常使用事件驱动的编程和回调的某种组合来采用此类策略,并且可以选择通过协程和/或线程并发使用。


4
T-SQL中的睡眠命令?
是否有办法编写T-SQL命令使其仅睡眠一段时间?我正在异步编写Web服务,并且希望能够运行一些测试以查看异步模式是否真的会使其更具扩展性。为了“模拟”速度很慢的外部服务,我希望能够使用运行缓慢但实际上没有处理大量东西的脚本来调用SQL Server。


2
何时正确使用Task.Run以及何时仅异步等待
我想问您关于何时使用正确的体系结构的意见Task.Run。我在WPF .NET 4.5应用程序(使用Caliburn Micro框架)中遇到了滞后的UI。 基本上我在做(非常简化的代码片段): public class PageViewModel : IHandle<SomeMessage> { ... public async void Handle(SomeMessage message) { ShowLoadingAnimation(); // Makes UI very laggy, but still not dead await this.contentLoader.LoadContentAsync(); HideLoadingAnimation(); } } public class ContentLoader { public async Task LoadContentAsync() { await DoCpuBoundWorkAsync(); await DoIoBoundWorkAsync(); await DoCpuBoundWorkAsync(); // I …

6
使用await / async时,HttpClient.GetAsync(...)从不返回
编辑: 这个问题看起来可能是相同的问题,但没有任何响应... 编辑:在测试用例5中,任务似乎停留在WaitingForActivation状态中。 我在.NET 4.5中使用System.Net.Http.HttpClient遇到了一些奇怪的行为-“等待”调用(例如)的结果httpClient.GetAsync(...)将永远不会返回。 仅在使用新的异步/等待语言功能和Tasks API的某些情况下会发生这种情况-仅使用延续时,代码似乎总是可以工作。 这是重现问题的一些代码-将其放入Visual Studio 11中的新“ MVC 4 WebApi项目”中,以暴露以下GET端点: /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never completes /api/test6 此处的每个端点都返回相同的数据(来自stackoverflow.com的响应头),但/api/test5永远不会完成。 我是否在HttpClient类中遇到错误,还是我在某种程度上滥用了API? 复制代码: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); var …

4
如何限制Parallel.ForEach?
我有一个Parallel.ForEach()异步循环,可以通过该循环下载一些网页。我的带宽有限,因此每次只能下载x页,但是Parallel.ForEach执行所需网页的整个列表。 在运行Parallel.ForEach时,是否可以限制线程数或任何其他限制器? 演示代码: Parallel.ForEach(listOfWebpages, webpage => { Download(webpage); }); 真正的任务与网页无关,因此创造性的网络爬网解决方案将无济于事。

7
如何拒绝异步/等待语法?
如何拒绝异步/等待功能返回的承诺? 例如本来 foo(id: string): Promise<A> { return new Promise((resolve, reject) => { someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400)) }); } 转换为异步/等待 async foo(id: string): Promise<A> { try{ await someAsyncPromise(); return 200; } catch(error) {//here goes if someAsyncPromise() rejected} return 400; //this will result in a resolved promise. }); } 那么,在这种情况下,我如何才能正确拒绝这一承诺?

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

14
所有异步forEach回调完成后的回调
如标题所示。我该怎么做呢? 我想whenAllDone()在forEach循环遍历每个元素并进行一些异步处理之后调用。 [1, 2, 3].forEach( function(item, index, array, done) { asyncFunction(item, function itemDone() { console.log(item + " done"); done(); }); }, function allDone() { console.log("All done"); whenAllDone(); } ); 有可能让它像这样工作吗?当forEach的第二个参数是一个回调函数,该函数一旦经过所有迭代便会运行? 预期产量: 3 done 1 done 2 done All done!

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

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 = …

3
了解dispatch_async
我对此代码有疑问 dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; }); 此代码的第一个参数是 dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) 我们是否在要求此代码在全局队列上执行串行任务,该队列本身的定义是返回给定优先级的全局并发队列? 使用dispatch_get_global_queuemain队列有什么好处? 我很困惑。您能否帮助我更好地理解这一点。

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; }

14
干净,轻巧的替代Python的替代品吗?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 5年前关闭。 改善这个问题 一个(很久以前),我写了一个网络蜘蛛,对它进行了多线程处理,以使并发请求能够同时发生。那是我的Python青年时代,在我了解GIL及其为多线程代码造成的相关麻烦之前(IE,大多数情况下,这些东西最终都被序列化了!)... 我想对这段代码进行重做,以使其更健壮并性能更好。基本上有两种方法可以执行此操作:我可以使用2.6+中的新多处理模块,也可以使用某种基于反应堆/事件的模型。我宁愿稍后再做,因为它更加简单且不易出错。 因此,问题与哪种框架最适合我的需求有关。以下是到目前为止我所知道的选项列表: Twisted:Python反应器框架的祖父:看起来很复杂,但是有点a肿。陡峭的学习曲线,可完成一项小任务。 Eventlet:从在家伙lindenlab。基于Greenlet的框架,适用于此类任务。我看了一下代码,但看起来不是很漂亮:不符合pep8,散布着印刷品(为什么人们要在框架中这样做!?),API似乎有点不一致。 PyEv:不成熟,尽管它基于libevent,所以现在似乎还没有人在使用它,因此它有一个可靠的后端。 asyncore:来自stdlib:über低级,似乎涉及很多工作,只是为了使事情起步。 龙卷风:尽管这是一种面向服务器的产品,旨在为动态网站提供服务器,但它确实具有异步HTTP客户端和简单的ioloop。看起来可以完成工作,但不能达到预期目的。[编辑:不幸的是,它不能在Windows上运行,这对我来说算是它了-这是我支持这个la脚平台的要求] 我有什么想念的吗?当然,必须有一个适合简化异步网络库的最佳选择的库! [编辑:非常感谢intgr指向此页面。如果滚动到底部,您将看到一个非常不错的项目列表,旨在以一种或多种方式解决此任务。实际上,自Twisted诞生以来,事情确实已经发生了变化:人们现在似乎更喜欢基于协同例程的解决方案,而不是传统的面向反应器/回调的解决方案。这种方法的好处是更直接的代码:我过去确实发现过,特别是在使用boost.asio时。在C ++中,基于回调的代码可能导致难以遵循的设计,并且对于未经训练的人来说是相对模糊的。使用协同例程可使您编写看起来至少同步一些的代码。我想现在我的任务是找出我喜欢的众多库中的哪一个,并尝试一下!很高兴我现在问...] [编辑:可能是关注或偶然发现此问题或在某种意义上关心此主题的任何人所感兴趣的:我发现了该工作可用工具的当前状态非常出色的文章]

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.