Questions tagged «asynchronous»

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

6
并行运行两个异步任务,并在.NET 4.5中收集结果
我已经尝试了一段时间,以获取一些我认为使用.NET 4.5会很简单的东西 我想同时启动两个长时间运行的任务,并 以最佳的C#4.5(RTM)方式收集结果 以下作品有效,但我不喜欢,因为: 我想Sleep成为一个异步方法,以便可以使用await其他方法 看起来笨拙 Task.Run() 我认为这根本没有使用任何新的语言功能! 工作代码: public static void Go() { Console.WriteLine("Starting"); var task1 = Task.Run(() => Sleep(5000)); var task2 = Task.Run(() => Sleep(3000)); int totalSlept = task1.Result + task2.Result; Console.WriteLine("Slept for a total of " + totalSlept + " ms"); } private static int Sleep(int …

2
使接口实现异步
我目前正在尝试使用一些异步方法来制作我的应用程序。我所有的IO都是通过接口的显式实现来完成的,我对如何使操作异步感到有些困惑。 如我所见,我在实现中有两个选择: interface IIO { void DoOperation(); } 选项1: 执行一个隐式实现异步并等待隐式实现中的结果。 class IOImplementation : IIO { async void DoOperation() { await Task.Factory.StartNew(() => { //WRITING A FILE OR SOME SUCH THINGAMAGIG }); } #region IIO Members void IIO.DoOperation() { DoOperation(); } #endregion } 选项2: 执行显式实现异步并等待隐式实现中的任务。 class IOAsyncImplementation : IIO { private …


13
如何限制并发异步I / O操作的数量?
// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); 这是问题所在,它会同时启动1000多个Web请求。有没有简单的方法来限制这些异步http请求的并发数量?这样,在任何给定时间下载的网页都不会超过20个。如何以最有效的方式做到这一点?

4
为什么.json()返回诺言?
我最近一直在搞弄fetch()api,发现有些奇怪的地方。 let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => { return { data: response.json(), status: response.status } }) .then(post => document.write(post.data)); ; post.data返回一个Promise对象。 http://jsbin.com/wofulo/2/edit?js,输出 但是,如果将其写为: let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => response.json()) .then(post => document.write(post.title)); ; post这是Object您可以访问标题属性的标准。 http://jsbin.com/wofulo/edit?js,输出 所以我的问题是:为什么response.json要在对象文字中返回一个promise,但是如果刚返回则返回一个值?

6
如何为Node.js编写异步函数
我试图研究应如何精确地编写异步函数。经过大量的文档研究后,我仍然不清楚。 如何为Node编写异步函数?如何正确实施错误事件处理? 问我问题的另一种方式是:我应该如何解释以下功能? var async_function = function(val, callback){ process.nextTick(function(){ callback(val); }); }; 另外,我在SO上发现了这个问题(“如何在node.js中创建非阻塞异步函数?”)。我感觉还没有得到答复。

8
用JavaScript等待一些异步任务完成的最简单方法?
我想删除一些mongodb集合,但这是一个异步任务。该代码将是: var mongoose = require('mongoose'); mongoose.connect('mongo://localhost/xxx'); var conn = mongoose.connection; ['aaa','bbb','ccc'].forEach(function(name){ conn.collection(name).drop(function(err) { console.log('dropped'); }); }); console.log('all dropped'); 控制台显示: all dropped dropped dropped dropped 确保all dropped删除所有收藏集后将被打印的最简单方法是什么?任何第三方都可以用来简化代码。


9
如何从Angle的Observable / http / async调用返回响应?
我有返回一个observable的服务,该服务向我的服务器发出一个http请求并获取数据。我想使用这些数据,但最终总是得到undefined。有什么问题? 服务内容: @Injectable() export class EventService { constructor(private http: Http) { } getEventList(): Observable<any>{ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.get("http://localhost:9999/events/get", options) .map((res)=> res.json()) .catch((err)=> err) } } 零件: @Component({...}) export class EventComponent { myEvents: any; constructor( private es: …

7
$ .when.apply($,someArray)有什么作用?
我正在阅读有关递延和承诺的文章,并不断遇到$.when.apply($, someArray)。我不清楚这到底是做什么的,正在寻找一种解释,说明哪一行可以正常工作(而不是整个代码段)。这里是一些上下文: var data = [1,2,3,4]; // the ids coming back from serviceA var processItemsDeferred = []; for(var i = 0; i < data.length; i++){ processItemsDeferred.push(processItem(data[i])); } $.when.apply($, processItemsDeferred).then(everythingDone); function processItem(data) { var dfd = $.Deferred(); console.log('called processItem'); //in the real world, this would probably make an AJAX call. setTimeout(function() …

4
在同步读取/写入端口时避免递归?
Rebol 3中的所有端口操作都是异步的。我发现进行同步通信的唯一方法是调用wait。 但是在这种情况下调用wait的问题是它将检查所有打开的端口的事件(即使它们不在传递给wait的端口块中)。然后他们调用响应的事件处理程序,但是可以在这些事件处理程序之一中进行读/写。这可能导致递归调用“等待”。 我该如何解决?
108 asynchronous  io  rebol  rebol3 

4
如何在恢复功能之前等待JavaScript Promise解决?
我正在做一些单元测试。测试框架将页面加载到iFrame中,然后对该页面运行声明。在每次测试开始之前,我创建一个Promise,将iFrame的onload事件设置为call resolve(),设置iFrame的事件src,并返回promise。 因此,我可以调用loadUrl(url).then(myFunc),它将在执行任何myFunc操作之前等待页面加载。 我在测试中的所有地方都使用了这种模式(不仅用于加载URL),主要是为了允许对DOM进行更改(例如,单击按钮,然后等待div隐藏和显示)。 这种设计的缺点是,我不断编写带有几行代码的匿名函数。此外,尽管有变通方法(QUnit assert.async()),但定义诺言的测试函数在诺言运行之前就已完成。 我想知道是否有任何方法可以从a获取值Promise或等待(阻止/睡眠)直到其解析,类似于.NET的IAsyncResult.WaitHandle.WaitOne()。我知道JavaScript是单线程的,但是我希望这并不意味着函数不能产生结果。 本质上,是否有一种方法可以使以下人员按正确的顺序吐出结果? function kickOff() { return new Promise(function(resolve, reject) { $("#output").append("start"); setTimeout(function() { resolve(); }, 1000); }).then(function() { $("#output").append(" middle"); return " end"; }); }; function getResultFrom(promise) { // todo return " end"; } var promise = kickOff(); var result = getResultFrom(promise); $("#output").append(result); <script …

4
为什么默认情况下所有功能都不应该异步?
.net 4.5 的异步等待模式正在改变范式。真是太好了。 我一直在将一些IO繁重的代码移植到async-await中,因为阻塞已成为过去。 不少人将异步等待与僵尸侵扰进行了比较,我发现它相当准确。异步代码与其他异步代码一样(您需要一个异步函数才能等待一个异步函数)。因此,越来越多的功能变得异步,并且这在您的代码库中不断增长。 将功能更改为异步在某种程度上是重复的并且是没有想象力的工作。async在声明中添加一个关键字,将返回值包装为Task<>,您已经完成了很多工作。整个过程有多么容易,这让人很不安,很快,一个替换文本的脚本将为我自动完成大多数“移植”。 现在是问题了。如果我的所有代码都在缓慢地变为异步状态,为什么不将其全部默认情况下设为异步呢? 我认为明显的原因是性能。异步等待有它的开销,不需要异步的代码,最好不要。但是,如果性能是唯一的问题,那么肯定可以进行一些巧妙的优化,从而在不需要时自动消除开销。我已经阅读了有关“快速路径”优化的信息,在我看来,仅它一项就可以解决大部分问题。 也许这可以与垃圾收集器带来的范式转变相提并论。在早期的GC时代,释放自己的内存肯定更有效。但是,大众仍然选择自动收集,而选择效率更高,更简单的代码,这些代码可能效率较低(甚至可以说不再适用)。也许这里应该是这样吗?为什么所有功能都不应该异步?


5
如何在.NET中产生并等待实现控制流?
据我了解yield,如果从迭代器块内部使用该关键字,它将控制流返回到调用代码,并且当再次调用该迭代器时,它将在中断的地方继续执行。 同样,await不仅等待被调用方,而且将控制权返回给调用方,仅在调用方awaits方法时从中断的地方接管。 换句话说,没有线程,异步和等待的“并发性”是由聪明的控制流引起的错觉,其细节被语法隐藏了。 现在,我是一名前汇编程序员,并且对指令指针,堆栈等非常熟悉,并且了解了正常的控制流程(子例程,递归,循环,分支)的工作方式。但是这些新结构-我不明白。 当await到达,如何运行时知道什么是一段代码下一步应该执行?它如何知道何时可以从上次中断的地方恢复,以及如何记住在哪里?当前调用堆栈发生了什么,是否以某种方式保存了它?如果调用方法在此之前进行其他方法调用await怎么办?为什么堆栈不被覆盖?在异常和堆栈展开的情况下,运行时到底将如何处理所有这一切? 当yield到达,如何运行跟踪那里的东西应该拿起点的?迭代器状态如何保存?

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.