why not both Future and CompletionHandler?

Rémi Forax forax at univ-mlv.fr
Thu Apr 14 09:01:24 PDT 2011


On 04/14/2011 05:38 PM, Alan Bateman wrote:
> Sangjin Lee wrote:
>> Yes, I think it can come very handy if you want to add some 
>> cross-cutting concerns in the completion handlers but allow the end 
>> users to interact with the result via Future.
>>
>> For example, suppose I build a framework/library for others using the 
>> async channels (HTTP app, ssh app, etc.). I want to allow my users 
>> freedom to choose between the "pull" (future) and the "push" 
>> (completion handler). However, *regardless* of what my end user 
>> choose to interact with the result, I want to be able to inject some 
>> concerns like logging, instrumenting, etc. in the form of a 
>> completion handler (can be completely internal to the framework).
>>
>> With the current APIs, if the user wants a future, the framework 
>> cannot use the completion handler and I would need to find another 
>> way to inject such logic. Or if I want to retain the completion 
>> handler for the framework, then I would need to create my own future 
>> objects to provide to the end users. Either approach is doable, but 
>> it would be so much easier if the NIO.2 APIs provide both mechanisms 
>> in a single method call. My 2 cents. Thanks!
> For high performance applications using completion handlers then we 
> don't want to future Future objects that won't be used. In your 
> framework/library then won't it return your own Future type anyway?
>
> -Alan.

Or if I want to use a completion handler but have also a way to cancel 
the operation.

Rémi



More information about the nio-dev mailing list