标签: asynchronous

并发,并行和异步方法有什么区别?

并发是在不同的线程上并行运行两个任务.但是,异步方法并行运行,但在同一个线程上运行.这是如何实现的?那么,并行性呢?

这3个概念之间有什么区别?

concurrency multithreading asynchronous

143
推荐指数
12
解决办法
5万
查看次数

我应该如何调用3个函数来一个接一个地执行它们?

如果我需要一个接一个地调用这个函数,

$('#art1').animate({'width':'1000px'},1000);        
$('#art2').animate({'width':'1000px'},1000);        
$('#art3').animate({'width':'1000px'},1000);        
Run Code Online (Sandbox Code Playgroud)

我知道在jQuery中我可以做类似的事情:

$('#art1').animate({'width':'1000px'},1000,'linear',function(){
    $('#art2').animate({'width':'1000px'},1000,'linear',function(){
        $('#art3').animate({'width':'1000px'},1000);        
    });        
});        
Run Code Online (Sandbox Code Playgroud)

但是,我们假设我没有使用jQuery而且我想调用:

some_3secs_function(some_value);        
some_5secs_function(some_value);        
some_8secs_function(some_value);        
Run Code Online (Sandbox Code Playgroud)

我应该如何调用这个函数来执行some_3secs_function,然后在该调用结束后,然后执行some_5secs_function并在该调用结束后再调用some_8secs_function

更新:

这仍然无效:

(function(callback){
    $('#art1').animate({'width':'1000px'},1000);
    callback();
})((function(callback2){
    $('#art2').animate({'width':'1000px'},1000);
    callback2();
})(function(){
    $('#art3').animate({'width':'1000px'},1000);
}));
Run Code Online (Sandbox Code Playgroud)

三个动画同时开始

我的错误在哪里

javascript closures asynchronous callback

138
推荐指数
5
解决办法
24万
查看次数

等待void异步方法

我怎么能等待void async方法完成它的工作?

例如,我有一个如下功能:

async void LoadBlahBlah()
{
    await blah();
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在我想确保在继续其他地方之前已经加载了所有内容.

c# asynchronous

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

等到swift for循环,异步网络请求完成执行

我希望for循环向firebase发送一堆网络请求,然后在方法完成执行后将数据传递给新的视图控制器.这是我的代码:

var datesArray = [String: AnyObject]()

for key in locationsArray {       
    let ref = Firebase(url: "http://myfirebase.com/" + "\(key.0)")
    ref.observeSingleEventOfType(.Value, withBlock: { snapshot in

        datesArray["\(key.0)"] = snapshot.value
    })
}
// Segue to new view controller here and pass datesArray once it is complete 
Run Code Online (Sandbox Code Playgroud)

我有几个问题.首先,我如何等待for循环完成并且所有网络请求都已完成?我无法修改observeSingleEventOfType函数,它是firebase SDK的一部分.另外,我是否会通过尝试从for循环的不同迭代中访问datesArray来创建某种竞争条件(希望这是有道理的)?我一直在阅读有关GCD和NSOperation的内容,但我有点失落,因为这是我构建的第一个应用程序.

注意:Locations数组是一个包含我需要在firebase中访问的键的数组.此外,重要的是异步触发网络请求.我只想等到所有异步请求完成后再将datesArray传递给下一个视图控制器.

asynchronous nsoperation grand-central-dispatch swift

138
推荐指数
7
解决办法
6万
查看次数

异步运行PHP任务

我在一个有点大的Web应用程序上工作,后端主要是在PHP中.代码中有几个地方我需要完成一些任务,但我不想让用户等待结果.例如,在创建新帐户时,我需要向他们发送欢迎电子邮件.但是当他们点击"完成注册"按钮时,我不想让他们等到实际发送电子邮件,我只想启动该过程,并立即向用户返回消息.

到目前为止,在某些地方,我一直在使用exec()感觉像是一个黑客.基本上做的事情如下:

exec("doTask.php $arg1 $arg2 $arg3 >/dev/null 2>&1 &");
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但我想知道是否有更好的方法.我正在考虑编写一个在MySQL表中排队任务的系统,以及一个单独的长时间运行的PHP脚本,每秒查询一次该表,并执行它找到的任何新任务.如果需要的话,这也有可能让我将来在几台工作机器之间拆分任务.

我是在重新发明轮子吗?有没有比exec()hack或MySQL队列更好的解决方案?

php queue asynchronous background task

136
推荐指数
7
解决办法
11万
查看次数

如何在Javascript中创建异步函数?

看看这段代码:

<a href="#" id="link">Link</a>
<span>Moving</span>

$('#link').click(function () {
    console.log("Enter");
    $('#link').animate({ width: 200 }, 2000, function() {
         console.log("finished");            
    });    
    console.log("Exit");    
});
Run Code Online (Sandbox Code Playgroud)

正如您在控制台中看到的那样,"animate"函数是异步的,它"分叉"事件处理程序块代码的流程.事实上 :

$('#link').click(function () {
    console.log("Enter");
    asyncFunct();
    console.log("Exit");    
});

function asyncFunct() {
    console.log("finished");
}
Run Code Online (Sandbox Code Playgroud)

按照块代码的流程!

如果我想创建我function asyncFunct() { }的这种行为,我怎么能用javascript/jquery做到这一点?我认为这是不使用的策略 setTimeout()

javascript jquery asynchronous function

136
推荐指数
7
解决办法
20万
查看次数

实体框架异步操作需要十倍的时间才能完成

我有一个使用Entity Framework 6处理数据库的MVC站点,我一直在尝试更改它,以便所有内容都作为异步控制器运行,并且对数据库的调用作为异步对应项运行(例如ToListAsync())而不是ToList())

我遇到的问题是,简单地将我的查询更改为异步会导致它们非常慢.

以下代码从我的数据上下文中获取"Album"对象的集合,并转换为相当简单的数据库连接:

// Get the albums
var albums = await this.context.Albums
    .Where(x => x.Artist.ID == artist.ID)
    .ToListAsync();
Run Code Online (Sandbox Code Playgroud)

这是创建的SQL:

exec sp_executesql N'SELECT 
[Extent1].[ID] AS [ID], 
[Extent1].[URL] AS [URL], 
[Extent1].[ASIN] AS [ASIN], 
[Extent1].[Title] AS [Title], 
[Extent1].[ReleaseDate] AS [ReleaseDate], 
[Extent1].[AccurateDay] AS [AccurateDay], 
[Extent1].[AccurateMonth] AS [AccurateMonth], 
[Extent1].[Type] AS [Type], 
[Extent1].[Tracks] AS [Tracks], 
[Extent1].[MainCredits] AS [MainCredits], 
[Extent1].[SupportingCredits] AS [SupportingCredits], 
[Extent1].[Description] AS [Description], 
[Extent1].[Image] AS [Image], 
[Extent1].[HasImage] AS [HasImage], 
[Extent1].[Created] AS [Created], 
[Extent1].[Artist_ID] AS [Artist_ID]
FROM [dbo].[Albums] AS [Extent1]
WHERE [Extent1].[Artist_ID] = @p__linq__0',N'@p__linq__0 …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous entity-framework async-await

135
推荐指数
2
解决办法
3万
查看次数

异步与多线程 - 有区别吗?

异步调用是否始终创建新线程?两者有什么区别?

异步调用是始终创建还是使用新线程?

维基百科说:

在计算机编程中,异步事件是独立于主程序流发生的事件.异步操作是在非阻塞方案中执行的操作,允许主程序流继续处理.

我知道异步调用可以在单线程上完成吗?这怎么可能?

language-agnostic multithreading asynchronous

129
推荐指数
9
解决办法
5万
查看次数

如何阐明异步和并行编程之间的区别?

许多平台都提倡异步和并行作为提高响应能力的手段.我一般都了解这种差异,但经常发现很难在我自己的心中以及其他人中表达出来.

我是一名工作日程序员,经常使用异步和回调.并行感觉异国情调.

但我觉得他们很容易混淆,特别是在语言设计层面.希望能够清楚地描述它们之间的关系(或不关联),以及各自最佳应用的程序类别.

parallel-processing multithreading asynchronous

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

来自.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);
    }
    catch (Exception ex)
    {
        Interlocked.Increment(ref _failedCalls);
    }
    finally
    { 
        if(httpResponse != null) httpResponse.Dispose();
    }

    lock (_syncLock)
    {
        _itemsLeft--;
        if (_itemsLeft == 0)
        {
            _utcEndTime = DateTime.UtcNow;
            this.DisplayTestResults();
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous async-await .net-4.5 dotnet-httpclient

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