One way to increase scalability of the server application is to run IO-bound operation (reading files, sockets, web requests, database requests etc) asynchronously. This doe
multiple async calls can be rewritten with Futures
var footask = QueryFooAsync();
var bartask = QueryBarAsync();
var baztask = QueryBazAsync();
var foos = await footask;
var bars = await bartask;
var baz = await baztask;
// do something with foos, bars, baz
can be replaced with
var foos = session.Query().....ToFuture();
var bars = session.Query().....ToFuture();
var baz = session.Query().....ToFutureValue();
await Task.Factory.StartNew(() => var ignored = baz.Value) // await the results
// do something with foos, bars, baz
this even has the benefit over async code that the roundtrip time is only paid once instead of 3 times.