I'm not sure about the following line:
DO NOT use underscore as variable name. This is incorrect:
task.ContinueWith((_) => _activeTasks.Release());
What would you like to see here? I mean if method accepts Action<Something> and you want to use it as Action (void)? In many languages single underscore means - missing or unused parameter.