well, they are useful whenever you have an asynchronous call, with the benefit of having a uniform interface supporting, among other things, exception handling in a natural way. For example, suppose you are developing a library implementing, say, an actor model with asynchronous messages/actions; with futures ( and promises, hidden behind some call mechanism ) you can return a value to user code with asynchronous semantics in a way he can understand, indipendently of the specific library interface, in a generic way; this is valuable, I think.