Improve Parallel Cache with Reactive Extensions & Unity Interception
Personally i believe that there is no need for the reactive framework in this scenario.
To handle the multithreaded nature of your problem i would first make sure that your RequestCache (Icache) uses the ConcurrentDictionary> and exposrts the method GetOrAdd

With this your code will look like this:

/// &lt;summary&gt;
/// Intercepts the calls and tries to retrieve from the cache
/// &lt;/summary&gt;
class CacheCallHandler : ICallHandler
{

    [Dependency]
    public ICache RequestCache { get; set; }

    public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
    {
        return InvokeAsync.Result;
    }

    public Task&lt;IMethodReturn&gt; InvokeAsync(IMethodInvocation input, GetNextHandlerDelegate getNext)
    {
        IMethodReturn mesg = null;

        string cacheKey = CacheKeyGenerator.GetCacheKey(input);

        //create the task to retrieve the data
        var task = RequestCache.GetOrAdd(
               cacheKey,
               key =&gt; new Task.Factory.StartNew(() =&gt; getNext()(input, getNext))
               );

        return task;       
    }


    /// &lt;summary&gt;
    /// Should always be the first to execute on the boundary
    /// &lt;/summary&gt;
    public int Order
    {
        get { return 1; }
        set { ; }
    }
}


The asynchronous version offers the option of to blocking the calling thread when invoking it.