Trivial implementation of IDisposableActivityMonitor that respects the disposable pattern (to support potential unmanaged resources). Dispose() simply closes all opened groups.
Inheritance: ActivityMonitor, IDisposableActivityMonitor
 /// <summary>
 /// Creates a monitor and executes <see cref="ActivityMonitorExtension.DependentSender.StartDependentActivity">StartDependentActivity</see> on it
 /// that opens a root info group with the token information.
 /// </summary>
 /// <param name="configurator">Optionally applies any configuration on the created monitor before opening the root activity group.</param>
 /// <param name="fileName">Source file name of the emitter (automatically injected by C# compiler but can be explicitly set).</param>
 /// <param name="lineNumber">Line number in the source file (automatically injected by C# compiler but can be explicitly set).</param>
 /// <returns>An activity monitor that must be disposed when the activity ends (to close any opened groups).</returns>
 public IDisposableActivityMonitor CreateDependentMonitor( Action<IActivityMonitor> configurator = null, [CallerFilePath]string fileName = null, [CallerLineNumber]int lineNumber = 0 )
 {
     var m = new DisposableActivityMonitor();
     if( configurator != null ) configurator( m );
     Start( this, m, fileName, lineNumber );
     return m;
 }