Questions tagged «asynchronous»

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

17
jasmine:异步回调未在jasmine.DEFAULT_TIMEOUT_INTERVAL指定的超时内调用
我有一个叫的服务requestNotificationChannel: app.factory("requestNotificationChannel", function($rootScope) { var _DELETE_MESSAGE_ = "_DELETE_MESSAGE_"; function deleteMessage(id, index) { $rootScope.$broadcast(_DELETE_MESSAGE_, { id: id, index: index }); }; return { deleteMessage: deleteMessage }; }); 我正在尝试使用茉莉花对该服务进行单元测试: "use strict"; describe("Request Notification Channel", function() { var requestNotificationChannel, rootScope, scope; beforeEach(function(_requestNotificationChannel_) { module("messageAppModule"); inject(function($injector, _requestNotificationChannel_) { rootScope = $injector.get("$rootScope"); scope = rootScope.$new(); …

8
使用异步componentDidMount()好吗?
是componentDidMount()在React Native中用作异步函数的好习惯还是应该避免呢? 我需要从AsyncStorage组件安装时获取一些信息,但是我知道使之成为可能的唯一方法是使componentDidMount()函数异步。 async componentDidMount() { let auth = await this.getAuth(); if (auth) this.checkAuth(auth); } 有什么问题吗,还有其他解决方案吗?

7
如何等待异步方法完成?
我正在编写一个WinForms应用程序,该应用程序将数据传输到USB HID类设备。我的应用程序使用了出色的Generic HID库v6.0,可以在这里找到。简而言之,当我需要将数据写入设备时,这就是被调用的代码: private async void RequestToSendOutputReport(List<byte[]> byteArrays) { foreach (byte[] b in byteArrays) { while (condition) { // we'll typically execute this code many times until the condition is no longer met Task t = SendOutputReportViaInterruptTransfer(); await t; } // read some data from device; we need to wait …

13
如何阐明异步编程和并行编程之间的区别?
许多平台都将异步和并行性作为提高响应能力的手段。我通常了解这种差异,但经常发现我和其他人都难以阐明。 我是一个工作日的程序员,经常使用异步和回调。并行感让人感到异国情调。 但是我觉得它们很容易混淆,特别是在语言设计级别。很想清楚地描述它们之间的关系(或不存在关系),以及最适合应用它们的程序类别。


3
了解事件循环
我正在考虑,这是我想到的: 假设我们有这样的代码: console.clear(); console.log("a"); setTimeout(function(){console.log("b");},1000); console.log("c"); setTimeout(function(){console.log("d");},0); 一个请求进入,并且JS引擎逐步开始执行上述代码。前两个呼叫是同步呼叫。但是当涉及到setTimeout方法时,它将成为异步执行。但是JS立即从中返回并继续执行,这称为Non-Blocking或Async。并且它继续在其他等等上工作。 执行结果如下: 交流数据库 因此,基本上第二个setTimeout首先完成,其回调函数比第一个更早执行,这很有意义。 我们在这里谈论单线程应用程序。JS Engine会继续执行此操作,除非它完成第一个请求,否则它将不会转到第二个请求。但好处是它不会等待像setTimeout解析这样的阻塞操作,因此它会更快,因为它接受新的传入请求。 但是我的问题围绕以下几个方面提出: #1:如果我们在谈论单线程应用程序,那么setTimeouts当JS引擎接受更多请求并执行它们时,什么机制会处理?单线程如何继续处理其他请求?setTimeout在其他请求不断进入并被执行的同时,什么起作用。 #2:如果这些setTimeout函数在更多请求传入并正在执行时在后台执行,那么在后台执行异步执行的是什么?我们所说的这个东西叫EventLoop什么? #3:但是不应该将整个方法都放入EventLoop以便执行整个过程并调用回调方法吗?这是我在谈论回调函数时所了解的: function downloadFile(filePath, callback) { blah.downloadFile(filePath); callback(); } 但是在这种情况下,JS引擎如何知道它是否是一个异步函数,以便可以将回调函数放在EventLoop? Perhaps something like theC#中的async`关键字中或某种表明JS引擎将采用的方法的属性是异步方法并应予以相应对待。 #4:但是一篇文章说与我猜测事情可能如何运作完全相反: 事件循环是回调函数的队列。当执行异步函数时,回调函数将被推入队列。在执行异步函数后的代码之前,JavaScript引擎不会开始处理事件循环。 #5:这里有这张图片可能会有所帮助,但是图片中的第一个解释是说问题4中提到的完全相同的内容: 因此,我的问题是要对上述项目进行一些澄清?

10
异步与多线程-有区别吗?
异步调用是否总是创建一个新线程?两者有什么区别? 异步调用是否总是创建或使用新线程? 维基百科说: 在计算机编程中,异步事件是独立于主程序流程而发生的事件。异步动作是在非阻塞方案中执行的动作,允许主程序流继续进行处理。 我知道异步调用可以在单线程上完成吗?这怎么可能?

2
如何实现异步动作委托方法?
一点背景资料。 我正在学习Web API堆栈,并且正在尝试以带有诸如Success和ErrorCodes之类的参数的“结果”对象的形式封装所有数据。 但是,不同的方法将产生不同的结果和错误代码,但是结果对象通常将以相同的方式实例化。 为了节省时间并进一步了解C#中的异步/等待功能,我试图将Web api操作的所有方法体包装在异步操作委托中,但遇到了一些麻烦... 给定以下类别: public class Result { public bool Success { get; set; } public List<int> ErrorCodes{ get; set; } } public async Task<Result> GetResultAsync() { return await DoSomethingAsync<Result>(result => { // Do something here result.Success = true; if (SomethingIsTrue) { result.ErrorCodes.Add(404); result.Success = false; } …

9
jQuery“ each()”函数是否同步?
考虑此方案以进行验证: function validateForm (validCallback) { $('#first-name').add($('#last-name')).add($('#address')).each(function () { // validating fields and adding 'invalid' class to invalid fields. }); // doing validation this way for almost 50 fields (loop over 50 fields) if ($('#holder .invalid').length == 0) { // submitting data here, only when all fields are validated. } } …

5
异步等待返回任务
有人可以解释一下同步方法意味着什么吗?如果我尝试将方法更改为,async则VS会抱怨它。 这有效: public Task MethodName() { return Task.FromResult<object>(null); } 这不起作用: public async Task MethodName() { return Task.FromResult<object>(null); } 所以基本上我想知道这到底意味着什么: Task.FromResult<object>(null);

3
.Net 4.5中的异步HttpClient对于密集负载应用程序是否是错误的选择?
我最近创建了一个简单的应用程序来测试HTTP调用吞吐量,该应用程序可以以异步方式与传统的多线程方法生成。 该应用程序能够执行预定义数量的HTTP调用,最后显示执行它们所需的总时间。在我的测试期间,所有HTTP调用都对我的本地IIS服务器进行,​​他们检索了一个小的文本文件(大小为12个字节)。 下面列出了异步实现的代码中最重要的部分: public async void TestAsync() { this.TestInit(); HttpClient httpClient = new HttpClient(); for (int i = 0; i < NUMBER_OF_REQUESTS; i++) { ProcessUrlAsync(httpClient); } } private async void ProcessUrlAsync(HttpClient httpClient) { HttpResponseMessage httpResponse = null; try { Task<HttpResponseMessage> getTask = httpClient.GetAsync(URL); httpResponse = await getTask; Interlocked.Increment(ref _successfulCalls); } …


5
如何在Chrome扩展程序中使用jQuery?
我正在写一个chrome扩展程序。我想jQuery在我的扩展程序中使用。我没有使用任何背景页面,只是一个背景脚本。 这是我的文件: manifest.json { "manifest_version": 2, "name": "Extension name", "description": "This extension does something,", "version": "0.1", "permissions": [ "activeTab" ], "browser_action": { "default_icon": "images/icon_128.png" }, "background": { "scripts": ["background.js"], "persistent": false }, "icons": { "16": "images/icon_16.png", "48": "images/icon_48.png", "128": "images/icon_128.png" } } 我的background.js文件只是运行另一个名为work.js // Respond to the click on extension …

6
为什么我不能扔在Promise.catch处理程序中?
为什么我不能只Error在catch回调内部抛出错误,让进程像在其他作用域中一样处理错误? 如果我不这样做,那么console.log(err)什么也不会打印出来,我也不知道发生了什么。这个过程刚刚结束... 例: function do1() { return new Promise(function(resolve, reject) { throw new Error('do1'); setTimeout(resolve, 1000) }); } function do2() { return new Promise(function(resolve, reject) { setTimeout(function() { reject(new Error('do2')); }, 1000) }); } do1().then(do2).catch(function(err) { //console.log(err.stack); // This is the only way to see the stack throw err; // …

7
为什么reactjs中的setState是Async而不是Sync?
我刚刚发现,在React this.setState()函数中,任何组件中的函数都是异步的,或者在完成其调用的函数后被调用。 现在我搜索并找到了这个博客(setState()状态更改操作在ReactJS中可能是同步的) 在这里,他发现setState是async(在堆栈为空时调用)或sync(在调用后立即调用),具体取决于触发状态更改的方式。 现在这两件事很难消化 在博客中,该setState函数在一个函数内部被调用updateState,但是触发该updateState函数的并不是被调用函数知道的东西。 他们为什么要使setState异步,因为JS是单线程语言,而此setState不是WebAPI或服务器调用,因此只能在JS的线程上完成。他们这样做是为了使Re-Rendering不会停止所有事件侦听器和其他操作,或者存在其他设计问题。

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.