Akka 设置延迟执行的Future_Patterns. after

akka.pattern.Patterns.after makes it easy to complete a Future with a value or exception after a

timeout.

代码如下,

package com.usoft;

import akka.actor.ActorSystem;
import akka.dispatch.Futures;
import akka.dispatch.OnComplete;
import akka.pattern.Patterns;
import scala.concurrent.ExecutionContext;
import scala.concurrent.Future;
import scala.concurrent.duration.Duration;

import java.util.Arrays;
import java.util.concurrent.Callable;

/**
 * Created by liyanxin on 2015/1/9.
 */
public class PatternAfterDemo {

    public static void main(String args[]) {

        ActorSystem system = ActorSystem.create("myActorSystem");
        final ExecutionContext ec = system.dispatcher();

        final Future<String> failExc = Futures.failed(new IllegalStateException("OHNOES1"));
        Future<String> delayed = Patterns.after(Duration.create(200, "millis"),
                system.scheduler(), ec, failExc);
        Future<String> future = Futures.future(new Callable<String>() {
            public String call() throws InterruptedException {
                Thread.sleep(1000);
                return "foo";
            }
        }, ec);
        Future<String> result = Futures.firstCompletedOf(Arrays.asList(future, delayed), ec);
        result.onComplete(new OnComplete<String>() {
            @Override
            public void onComplete(Throwable failure, String success) throws Throwable {
                if (failure != null) {
                    failure.printStackTrace();
                } else {
                    System.out.println(success);
                }
            }
        }, ec);
    }
}

==================================END==================================

时间: 2024-10-22 04:27:19

Akka 设置延迟执行的Future_Patterns. after的相关文章

iOS 设置 延迟执行 与 取消延迟执行 方法 以及对 run loop 初步认识

之前开发过程中经常会有需求会使用 NSObject中的"performSelector:withObject:afterDelay:"做方法延迟执行的处理, 但是 还没有什么地方需要实现 取消 这个延迟执行方法"cancelPreviousPerformRequestsWithTarget:".(具体可参见系统库文件 NSOject里面两个方法的声明). 但是 我们应该知道在什么条件下,合理使用 延迟 与 取消延迟. 延迟 和 取消延迟 应该 在同一个 事件处理循环

[ jquery 效果 delay(duration,[queueName]) ] 此方法用于对队列中的下一项的执行设置延迟

此方法用于对队列中的下一项的执行设置延迟 实例: <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title> <meta http-equiv='description' content=''.animation' is my page'> <meta http-equiv='keywords' content='keyword1,keyw

C#延迟执行 1.0版本

涉及的知识有泛型,委托,多线程 实现了延迟执行一个函数,可以指定延迟时间,延迟的 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace WindowsFormsApplication1 { class DelayClass<T> { // public

使用lambda编程之延迟执行

使用lambda表达式的主要原因是,将代码的执行延迟到一个合适的时间点. 所有的lambda表达式都是延迟执行的.毕竟,如果你希望立即执行一段代码,那就没有必要使用lambda表达式了.延迟执行代码的原因有很多,例如: 在另一个线程中运行代码多次运行代码在某个算法的正确时间点上运行代码(例如排序中的比较操作)当某些情况发生时运行代码(按钮点击,数据到达等)当你使用lambda进行编程时,应当好好考虑一下希望达到什么样的效果.举个例子:假设你需要记录一个事件的日志: logger.info("x:

iOS: 零误差或极小误差的定时执行或延迟执行?

问题如下: 节奏类游戏需要执行很多的跟音乐节拍相关的操作,并且为了保证节奏感,需要让操作跟节拍的关系十分紧密.对两者间隔要求不能超过0.02秒或更低. 目前使用了 GCD 中的 asyncAfter(deadline:)方法,不过误差总是要大于0.05秒,并且还无法保证误差会不会传递下去.请问有更好的方式来解决误差吗? var time = Date().timeIntervalSince1970 let dq = DispatchQueue(label: "queue", qos:

nodejs延迟执行

setImmediate方法和process.nextTick()方法都是延迟执行的方法,先来看下面一个例子,来区别两者的区别. process.nextTick(function(args){ console.log("nextTick延迟执行!"); }); setImmediate(function(args){ console.log("setImmediate延迟执行!"); }); console.log("正常执行!"); //正常

延迟执行

// 延迟执行不要用sleep,坏处:卡住当前线程    [NSThread sleepForTimeInterval:(NSTimeInterval)]; // 一旦定制好延迟任务后,不会卡主当前线程[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay:<#(NSTimeInterval)#>]; //n秒后回到主线程执行block中的代码 dispatch_queue_t queue = dis

IOS 关于取消延迟执行函数的种种。performSelector与cancelPreviousPerformRequestsWithTarget

本文非本人撰写 [cpp] view plaincopy @interface NSObject (NSDelayedPerforming) - (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay inModes:(NSArray *)modes; - (void)performSelector:(SEL)aSelector withObject:(id)a

LINQ之路 6:延迟执行(Deferred Execution)

LINQ中大部分查询运算符都有一个非常重要的特性:延迟执行.这意味着,他们不是在查询创建的时候执行,而是在遍历的时候执行(换句话说,当enumerator的MoveNext方法被调用时).让我们考虑下面这个query: static void TestDeferredExecution() { var numbers = new List<int>(); numbers.Add(1); IEnumerable<int> query = numbers.Select(n =>