public void DoItInSync(InfoObject info)
        {
            string currentMethodName = nameof(DoItInSync);

            info.IncreaseIndentationLevel();

            var lenghtyStuff = new LengthyStuff();

            info.Log($"Begin of {currentMethodName} before calling DoLengthy-Sync");
            lenghtyStuff.DoLengthyOperation(info);
            info.Log($"End of {currentMethodName} after calling DoLengthy-Sync");

            info.DecreaseIndentationLevel();
        }
        public async Task TaskDelay(InfoObject info, bool configureAwait = true)
        {
            string currentMethodName = nameof(TaskDelay);
            var    lenghtyStuff      = new LengthyStuff();

            info.IncreaseIndentationLevel();
            info.Log($"Begin of {currentMethodName} before awaiting Task.Delay with ContinueOnCapturedContext {configureAwait}");
            var task = Task.Delay(info.MillisToSleep).ConfigureAwait(configureAwait);

            info.Log($"In {currentMethodName} before awaiting Task.Delay");
            await task;

            info.Log($"In {currentMethodName} after awaiting Task.Delay");

            info.DecreaseIndentationLevel();
        }
        public async Task <bool> DoItInAsyncInNewThread(InfoObject info, bool configureAwait = true)
        {
            string currentMethodName = nameof(DoItInAsyncInNewThread);

            info.IncreaseIndentationLevel();
            var lenghtyStuff = new LengthyStuff();

            info.Log($"Begin of {currentMethodName} before DoLengthy-Async");
            var task = Task.Run(async() => await lenghtyStuff.DoLengthyOperationAsync(info, configureAwait)).ConfigureAwait(configureAwait);

            info.Log($"In {currentMethodName} after DoLengthy, but before await");
            bool result = await task;

            info.Log($"End of {currentMethodName} after awaiting of DoLengthy-Async");

            info.DecreaseIndentationLevel();
            return(result);
        }
        public async Task <bool> DoItInAsync(InfoObject info, bool configureAwait = true)
        {
            string currentMethodName = nameof(DoItInAsync);

            info.IncreaseIndentationLevel();
            var lenghtyStuff = new LengthyStuff();

            info.Log($"Begin of {currentMethodName} before calling DoLengthy-Async");
            var task = lenghtyStuff.DoLengthyOperationAsync(info, configureAwait).ConfigureAwait(continueOnCapturedContext: configureAwait);

            // perhaps you can do something before you need result from async-method
            info.Log($"In {currentMethodName} after calling DoLengthy-Async, but before awaiting it...");

            // but now need result form task
            bool result = await task;

            info.Log($"End of {currentMethodName} after awaiting DoLengthy-Async...");
            info.DecreaseIndentationLevel();

            return(result);
        }