private Task OnImplicitlyActivated()
        {
            _isImplicitlyActiveSource.TrySetResult();

            IEnumerable <Task> tasks = ImplicitlyActiveServices.Select(c => c.Value.ActivateAsync());

            return(Task.WhenAll(tasks));
        }
        private Task OnImplicitlyDeactivated()
        {
            var source = new TaskCompletionSource();

            // Make sure the writes in constructor don't
            // move to after we publish the value
            Thread.MemoryBarrier();

            _isImplicitlyActiveSource = source;

            IEnumerable <Task> tasks = ImplicitlyActiveServices.Select(c => c.Value.DeactivateAsync());

            return(Task.WhenAll(tasks));
        }