Skip to content

Commit ef023d1

Browse files
Merge pull request #878 from benjchristensen/scheduleRecursive
Scheduler.scheduleRecursive
2 parents 6eb7162 + df66fa1 commit ef023d1

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

rxjava-core/src/main/java/rx/Scheduler.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,57 @@ public void call(Inner inner) {
9494
return schedule(recursiveAction, initialDelay, unit);
9595
}
9696

97+
public final Subscription scheduleRecursive(final Action1<Recurse> action) {
98+
return schedule(new Action1<Inner>() {
99+
100+
@Override
101+
public void call(Inner inner) {
102+
action.call(new Recurse(inner, action));
103+
}
104+
105+
});
106+
}
107+
108+
public static final class Recurse {
109+
final Action1<Recurse> action;
110+
final Inner inner;
111+
112+
private Recurse(Inner inner, Action1<Recurse> action) {
113+
this.inner = inner;
114+
this.action = action;
115+
}
116+
117+
/**
118+
* Schedule the current function for execution immediately.
119+
*/
120+
public final void schedule() {
121+
final Recurse self = this;
122+
inner.schedule(new Action1<Inner>() {
123+
124+
@Override
125+
public void call(Inner _inner) {
126+
action.call(self);
127+
}
128+
129+
});
130+
}
131+
132+
/**
133+
* Schedule the current function for execution in the future.
134+
*/
135+
public final void schedule(long delay, TimeUnit unit) {
136+
final Recurse self = this;
137+
inner.schedule(new Action1<Inner>() {
138+
139+
@Override
140+
public void call(Inner _inner) {
141+
action.call(self);
142+
}
143+
144+
}, delay, unit);
145+
}
146+
}
147+
97148
public abstract static class Inner implements Subscription {
98149

99150
/**

0 commit comments

Comments
 (0)