标签: asynchronous

CompletableFuture,Future和RxJava的Observable之间的区别

我想知道的区别 CompletableFuture,FutureObservable RxJava.

我所知道的都是异步但是

Future.get() 阻止线程

CompletableFuture 给出了回调方法

RxJava Observable--- CompletableFuture与其他好处相似(不确定)

例如:如果客户端需要进行多次服务调用,那么当我们使用Futures(Java)时Future.get()将按顺序执行...想知道它在RxJava中的表现如何...

文档http://reactivex.io/intro.html

很难使用Futures来优化组合条件异步执行流程(或者不可能,因为每个请求的延迟在运行时会有所不同).当然,这可以完成,但它很快变得复杂(因此容易出错)或者过早地阻塞Future.get(),这消除了异步执行的好处.

真的很想知道如何RxJava解决这个问题.我发现从文档中很难理解.

java multithreading asynchronous java-8 rx-java

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

Python中的异步方法调用?

我想知道在Python中是否有任何用于异步方法调用的库.如果你可以做类似的事情会很棒

@async
def longComputation():
    <code>


token = longComputation()
token.registerCallback(callback_function)
# alternative, polling
while not token.finished():
    doSomethingElse()
    if token.finished():
        result = token.result()
Run Code Online (Sandbox Code Playgroud)

或者异步调用非异步例程

def longComputation()
    <code>

token = asynccall(longComputation())
Run Code Online (Sandbox Code Playgroud)

如果在语言核心中使用更加精细的策略,那就太棒了.这是考虑过吗?

python asynchronous

170
推荐指数
10
解决办法
20万
查看次数

使用Moq模拟单元测试的异步方法

我正在测试一个进行Web API调用的服务的方法.HttpClient如果我还在本地运行Web服务(位于解决方案中的另一个项目中),则使用正常工作正常进行单元测试.

但是,当我签入我的更改时,构建服务器将无法访问Web服务,因此测试将失败.

我已经为我的单元测试设计了一种方法,通过创建一个IHttpClient接口并实现我在我的应用程序中使用的版本.对于单元测试,我使用模拟的异步post方法创建一个模拟版本.这是我遇到问题的地方.我想HttpStatusResult为这个特定的测试返回一个OK .对于另一个类似的测试,我将返回一个糟糕的结果.

测试将运行但永远不会完成.它挂在等待.我是异步编程,代表和Moq本身的新手,我一直在搜索SO和谷歌一段时间学习新东西,但我似乎仍然无法解决这个问题.

这是我试图测试的方法:

public async Task<bool> QueueNotificationAsync(IHttpClient client, Email email)
{
    // do stuff
    try
    {
        // The test hangs here, never returning
        HttpResponseMessage response = await client.PostAsync(uri, content);

        // more logic here
    }
    // more stuff
}
Run Code Online (Sandbox Code Playgroud)

这是我的单元测试方法:

[TestMethod]
public async Task QueueNotificationAsync_Completes_With_ValidEmail()
{
    Email email = new Email()
    {
        FromAddress = "bob@example.com",
        ToAddress = "bill@example.com",
        CCAddress = "brian@example.com",
        BCCAddress = "ben@example.com",
        Subject = "Hello",
        Body = "Hello …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing asynchronous moq

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

实现C#通用超时

我正在寻找实现通用方法的好主意,让一行(或匿名委托)代码执行超时.

TemperamentalClass tc = new TemperamentalClass();
tc.DoSomething();  // normally runs in 30 sec.  Want to error at 1 min
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个可以在我的代码与气质代码交互的许多地方(我无法改变)优雅地实现的解决方案.

另外,如果可能的话,我想让违规的"超时"代码停止执行.

c# multithreading asynchronous timeout c#-3.0

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

ASP.NET MVC中的异步操作是否使用.NET 4上的ThreadPool中的线程

在这个问题之后,在ASP.NET MVC中使用异步操作时,我感到很舒服.所以,我写了两篇博文:

我对ASP.NET MVC上的异步操作有太多的误解.

我总是听到这句话:如果操作异步运行,应用程序可以更好地扩展

我也听到了很多这样的句子:如果你有大量的流量,你可能最好不要异步执行查询 - 消耗2个额外的线程来为一个请求提供服务会使资源远离其他传入的请求.

我认为这两句话是不一致的.

我没有太多关于threadpool如何在ASP.NET上工作的信息,但我知道线程池的线程大小有限.所以,第二句话必须与这个问题有关.

我想知道ASP.NET MVC中的异步操作是否在.NET 4上使用ThreadPool中的线程?

例如,当我们实现AsyncController时,应用程序结构如何?如果我获得巨大的流量,实现AsyncController是一个好主意吗?

有没有人可以在我眼前取下这个黑色的窗帘并向我解释ASP.NET MVC 3(NET 4)上有关异步的处理?

编辑:

我已经阅读了下面这个文件近几百次,我理解主要的交易,但我仍然感到困惑,因为那里有太多不一致的评论.

在ASP.NET MVC中使用异步控制器

编辑:

让我们假设我有如下控制器动作(AsyncController虽然不是实现):

public ViewResult Index() { 

    Task.Factory.StartNew(() => { 
        //Do an advanced looging here which takes a while
    });

    return View();
}
Run Code Online (Sandbox Code Playgroud)

正如你在这里看到的那样,我开始操作并忘掉它.然后,我立即返回而不等待它完成.

在这种情况下,这是否必须使用来自线程池的线程?如果是这样,在完成之后,该线程会发生什么?GC完成后会进来清理吗?

编辑:

对于@ Darin的回答,这里是一个与数据库对话的异步代码示例:

public class FooController : AsyncController {

    //EF 4.2 DbContext instance
    MyContext _context = new MyContext();

    public void IndexAsync() { …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net-mvc asynchronous asp.net-mvc-3

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

如何避免在Node.js中长时间嵌套异步函数

我想创建一个显示来自数据库的一些数据的页面,所以我创建了一些从我的数据库中获取数据的函数.我只是Node.js的新手,所以据我所知,如果我想在一个页面中使用所有这些(HTTP响应),我必须将它们全部嵌套:

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  var html = "<h1>Demo page</h1>";
  getSomeDate(client, function(someData) {
    html += "<p>"+ someData +"</p>";
    getSomeOtherDate(client, function(someOtherData) {
      html += "<p>"+ someOtherData +"</p>";
      getMoreData(client, function(moreData) {
        html += "<p>"+ moreData +"</p>";
        res.write(html);
        res.end();
      });
    });
  });
Run Code Online (Sandbox Code Playgroud)

如果有很多这样的函数,那么嵌套就成了问题.

有办法避免这种情况吗?我想这与你如何组合多个异步函数有关,这似乎是一个基本的东西.

javascript asynchronous functional-programming node.js

156
推荐指数
8
解决办法
6万
查看次数

是否可以进行异步jdbc调用?

我想知道是否有办法对数据库进行异步调用?

例如,假设我有一个需要很长时间才能处理的大请求,我想发送请求并在请求返回值时接收通知(通过传递监听器/回调或其他东西).我不想阻止等待数据库回答.

我不认为使用线程池是一种解决方案,因为它不能扩展,在繁重的并发请求的情况下,这将产生大量的线程.

我们正面临网络服务器的这种问题,我们通过使用select/poll/epoll系统调用找到了解决方案,以避免每个连接有一个线程.我只是想知道如何在数据库请求中使用类似的功能?

注意:我知道使用FixedThreadPool可能是一个很好的解决办法,但我很惊讶没有人开发出一个真正异步的系统(没有使用额外的线程).

**更新**
由于缺乏真正实用的解决方案,我决定自己创建一个库(finagle的一部分):finagle-mysql.它基本上解码/解码mysql请求/响应,并在引擎盖下使用Finagle/Netty.即使有大量的连接,它也能很好地扩展.

java asynchronous scala jdbc nonblocking

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

149
推荐指数
7
解决办法
17万
查看次数

在linq select中异步等待

我需要修改现有程序,它包含以下代码:

var inputs = events.Select(async ev => await ProcessEventAsync(ev))
                   .Select(t => t.Result)
                   .Where(i => i != null)
                   .ToList();
Run Code Online (Sandbox Code Playgroud)

但这对我来说似乎很奇怪,首先是使用asyncawait选择.根据Stephen Cleary的回答,我应该能够放弃这些.

然后第二个Select选择结果.这是不是意味着任务根本不是异步的并且是同步执行的(没有任何努力),或者异步执行任务,何时完成查询的其余部分?

我应该根据Stephen Cleary的另一个答案写下面的代码如下:

var tasks = await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev)));
var inputs = tasks.Where(result => result != null).ToList();
Run Code Online (Sandbox Code Playgroud)

这是完全一样的吗?

var inputs = (await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev))))
                                       .Where(result => result != null).ToList();
Run Code Online (Sandbox Code Playgroud)

当我正在研究这个项目时,我想更改第一个代码示例,但我不太热衷于更改(显然工作)异步代码.也许我只是担心什么都没有,所有3个代码示例完全相同?

ProcessEventsAsync如下所示:

async Task<InputResult> ProcessEventAsync(InputEvent ev) {...}
Run Code Online (Sandbox Code Playgroud)

c# linq asynchronous

147
推荐指数
7
解决办法
9万
查看次数

为什么在C#中使用Task <T>而不是ValueTask <T>?

从C#7.0开始,异步方法可以返回ValueTask <T>.解释说,当我们有缓存结果或通过同步代码模拟异步时,应该使用它.但是我仍然不明白使用ValueTask的问题是什么,或者实际上为什么async/await不是从一开始就使用值类型构建的.ValueTask何时无法完成这项工作?

c# asynchronous

146
推荐指数
5
解决办法
2万
查看次数