标签: asynchronous

如何等待异步方法完成?

我正在编写一个将数据传输到USB HID类设备的WinForms应用程序.我的应用程序使用了优秀的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 for this to return
        RequestToGetInputReport();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我的代码退出while循环时,我需要从设备中读取一些数据.但是,设备无法立即响应,因此我需要等待此呼叫返回才能继续.因为它目前存在,RequestToGetInputReport()声明如下:

private async void RequestToGetInputReport()
{
    // lots of code prior to this
    int bytesRead = await GetInputReportViaInterruptTransfer();
}
Run Code Online (Sandbox Code Playgroud)

对于它的价值,GetInputReportViaInterruptTransfer()的声明如下所示:

internal …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await

129
推荐指数
4
解决办法
26万
查看次数

Python请求的异步请求

我尝试了python请求库文档中提供的示例:

http://docs.python-requests.org/en/latest/user/advanced/#asynchronous-requests

async.map(rs)我得到的响应代码,但我想请求每一页的内容.

out = async.map(rs)
print out[0].content
Run Code Online (Sandbox Code Playgroud)

例如,只是不工作.

python asynchronous httprequest python-requests

128
推荐指数
10
解决办法
21万
查看次数

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

});
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用jasmine对此服务进行单元测试:

"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();
            requestNotificationChannel = _requestNotificationChannel_;
        })

        spyOn(rootScope, '$broadcast');
    });


    it("should broadcast delete message notification", function(done) {

        requestNotificationChannel.deleteMessage(1, 4);
        expect(rootScope.$broadcast).toHaveBeenCalledWith("_DELETE_MESSAGE_", { id: 1, index: 4 });
        done();       
    });
});
Run Code Online (Sandbox Code Playgroud)

我读到了Jasmine中的异步支持,但由于我对使用javascript的单元测试不熟悉,因此无法使其正常工作.

我收到一个错误: …

debugging unit-testing asynchronous jasmine angularjs

128
推荐指数
8
解决办法
17万
查看次数

Node.js中的非阻塞或异步I/O是什么?

在服务器端Javascript引擎的上下文中,什么是非阻塞I/O或异步I/O?我认为这被提到是优于Java服务器端实现的优势.

asynchronous nonblocking serverside-javascript node.js

127
推荐指数
2
解决办法
8万
查看次数

Node.js是package.json的主要参数

我已经做了很多搜索.但是,仍然怀疑Node.js的package.json中的主要参数.

  1. 如何填写这个领域有帮助?以另一种方式询问,如果此字段显示,我可以以不同的方式启动模块吗?
  2. 我可以在主参数中填入多个脚本吗?如果是的话,他们会以两个线程开始吗?如果不是,我如何在模块中启动两个脚本并让它们并行运行?

我知道第二个问题很奇怪.这是因为我在OpenShift上托管了一个Node.js应用程序,但该应用程序由两个主要组件组成.一个是REST API,另一个是提供服务的通知.

我担心如果将REST API实现为单个线程,则通知传递过程将阻止REST API.但是,他们必须连接到相同的MongoDB盒式磁带.此外,如果可能的话,如果两个组件都可以在相同的档位上运行,我想保存一个档位.

欢迎任何建议.

javascript rest asynchronous node.js openshift

127
推荐指数
5
解决办法
7万
查看次数

了解事件循环

我在想它,这就是我提出的:

假设我们有这样的代码:

console.clear();
console.log("a");
setTimeout(function(){console.log("b");},1000);
console.log("c");
setTimeout(function(){console.log("d");},0);
Run Code Online (Sandbox Code Playgroud)

请求进来,JS引擎开始逐步执​​行上面的代码.前两个呼叫是同步呼叫.但是当谈到setTimeout方法时,它就变成了异步执行.但是JS立即从它返回并继续执行,这被称为Non-BlockingAsync.并继续致力于其他等

执行结果如下:

ACDB

所以基本上第二个setTimeout完成第一个,它的回调函数比第一个更早执行,这是有道理的.

我们在这里谈论单线程应用程序.JS引擎继续执行此操作,除非它完成第一个请求,否则它不会进入第二个请求.但好处是它不会等待阻塞操作,比如setTimeout解决所以它会更快,因为它接受新的传入请求.

但我的问题出现在以下几个方面:

#1:如果我们讨论的是单线程应用程序,那么setTimeouts当JS引擎接受更多请求并执行它们时,什么机制会处理?单个线程如何继续处理其他请求?什么工作,setTimeout而其他请求继续进入并执行.

#2:如果这些setTimeout函数在幕后执行,而有更多请求进入和执行,那么在幕后执行异步执行的是什么?我们谈到的这件事叫EventLoop什么?

#3:但是不应该将整个方法放入,EventLoop以便整个事件被执行并调用回调方法?这是我在谈论回调函数时所理解的:

function downloadFile(filePath, callback)
{
  blah.downloadFile(filePath);
  callback();
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,JS引擎如何知道它是否是异步函数,以便它可以将回调EventLoop? Perhaps something like the放在C#中的async`关键字中,或者某种属性指示JS引擎将采用的方法是异步方法并应相应地对待.

#4:但是一篇文章说的与我猜测事情可能如何起作用完全相反:

Event Loop是一个回调函数队列.执行异步函数时,回调函数将被推入队列.在执行异步函数之后的代码之前,JavaScript引擎不会开始处理事件循环.

#5:这里有这个图像可能会有所帮助,但图像中的第一个解释是说第4个问题中提到的完全相同:

在此输入图像描述

所以我的问题是要对上面列出的项目做一些澄清?

javascript multithreading asynchronous event-loop node.js

126
推荐指数
3
解决办法
5万
查看次数

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.
   }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,if块在循环完成之前执行.我期望validateForm同步执行主体,但似乎each()异步执行jQuery 函数.我对吗?为什么这不起作用?

jquery asynchronous

125
推荐指数
4
解决办法
7万
查看次数

Kotlin协同程序中的launch/join和async/await之间有什么区别

kotlinx.coroutines库中,您可以使用launch(with join)或async(with await)启动新的协同程序.他们之间有什么区别?

asynchronous coroutine kotlin kotlin-coroutines

122
推荐指数
6
解决办法
2万
查看次数

返回void和返回任务有什么区别?

在查看各种C#异步CTP示例时,我看到一些返回的异步函数void,以及其他返回非泛型函数的异步函数Task.我可以看到为什么返回a Task<MyType>对于在异步操作完成时将数据返回给调用者很有用,但是我看到的返回类型的函数Task永远不会返回任何数据.为什么不回来void

c# asynchronous return-type task-parallel-library async-ctp

121
推荐指数
4
解决办法
4万
查看次数

为什么我不能扔进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; // This does nothing
});
Run Code Online (Sandbox Code Playgroud)

如果回调在主线程中执行,为什么Error会被黑洞吞噬?

javascript asynchronous throw promise es6-promise

119
推荐指数
3
解决办法
7万
查看次数