"Cancelable" streams
Remi Forax
forax at univ-mlv.fr
Sat Dec 8 14:21:33 PST 2012
On 12/08/2012 10:51 PM, Brian Goetz wrote:
>> The main issue is that your example uses side effect,
>> () -> cancelFlag.set(true)
>> which goes against the model
>
> The model is not "side effects are illegal"; we support forEach() and
> into() which are side-effectful. The model is more "don't use
> side-effects where they are not needed."
forEach() and into() are terminal, not
>
>> > Here, you might want to process until some threshold has been reached
>> > (find the first N results), until some external event has occured
>> > (process for five minutes and take the best result; process until the
>> asked to shut down.)
>>
>> find the N results => use limit()
>
> Parallel limit has some serious limitations that make it pretty
> unsuitable for this case. While these may be fixable, the effort and
> distortion involved is far, far greater than what is being suggested
> here. In fact, I'm on the fence about whether to keep limit at all in
> its current state; I worry people will expect more of it than it can
> deliver, and be unhappy.
I don't get it. You can check the limit the very same way you want to
check shouldCancel.
>
>> fitting the whole word and the kitchen sink into the Stream API is not a
>> goal.
>
> No, but this is a pretty lightweight cancelation mechanism -- far more
> lightweight than limit as currently implemented. We've talked to
> customers who are very interested in using this for processing
> infinite event streams. The only thing missing is "how do I make it
> stop."
>
And why this has to be included in the jdk ?
It seems to be a great use case to see if there is enough entrypoints in
the jdk to implement that semantics externally.
Rémi
More information about the lambda-libs-spec-observers
mailing list