/// <summary>
        /// 将某个 <see cref="ViewModelBase"/> 中创建的 <see cref="AsyncCommandBase"/> 加入到异步互斥命令集合中进行统一管理。
        /// </summary>
        /// <param name="viewModel">异步互斥命令的互斥边界,在此 ViewModel 中。</param>
        /// <param name="asyncCommand">互斥的异步命令。</param>
        private static void ManageExclusiveCommand(
            [NotNull] ViewModelBase viewModel, [NotNull] AsyncCommandBase asyncCommand)
        {
            if (!ManagedAsyncCommandDictionary.TryGetValue(viewModel, out var commands))
            {
                commands = new HashSet <AsyncCommandBase>();
                ManagedAsyncCommandDictionary[viewModel] = commands;
            }

            commands.Add(asyncCommand);
        }
        /// <summary>
        /// 找到与指定 <see cref="AsyncCommandBase"/> 异步命令互斥的所有异步命令。
        /// </summary>
        /// <param name="asyncCommand">查找与之互斥的异步命令。</param>
        /// <returns>与指定异步命令互斥的所有异步命令。</returns>
        internal static IEnumerable <AsyncCommandBase> FindExclusiveCommandsFrom([NotNull] AsyncCommandBase asyncCommand)
        {
            if (asyncCommand == null)
            {
                throw new ArgumentNullException(nameof(asyncCommand));
            }

            foreach (var pair in ManagedAsyncCommandDictionary)
            {
                if (pair.Value.Contains(asyncCommand))
                {
                    return(FindExclusiveCommandsFrom(pair.Key));
                }
            }

            return(Enumerable.Empty <AsyncCommandBase>());
        }