private void Start()
        {
            // AsyncMessageBroker.Default  はアプリケーション全体で有効なインスタンス
            var asyncMessageBroker           = AsyncMessageBroker.Default;
            IAsyncMessagePublisher publisher = asyncMessageBroker;
            IAsyncMessageReceiver  receiver  = asyncMessageBroker;

            // 購読者1
            // 受け取ったstringを3秒間表示した後に消す
            receiver.Subscribe <string>(x =>
            {
                _text.text = x;
                return(Observable
                       .Timer(TimeSpan.FromSeconds(3))
                       .ForEachAsync(_ => _text.text = ""));
            }).AddTo(this);

            // 購読者2
            // 受け取ったstringをコンソールに出して即終了
            receiver.Subscribe <string>(x =>
            {
                Debug.Log(x);
                return(Observable.Return(Unit.Default));
            }).AddTo(this);

            var cancellationToken = this.GetCancellationTokenOnDestroy();

            PublishMessageAsync(publisher, cancellationToken).Forget();
        }
        // メッセージを順番に発行する
        private async UniTaskVoid PublishMessageAsync(
            IAsyncMessagePublisher publisher,
            CancellationToken ct)
        {
            // メッセージを発行する
            // すべての購読者での処理が完了すると次に進む
            await publisher.PublishAsync("Hello").ToUniTask(cancellationToken: ct);

            await publisher.PublishAsync("World").ToUniTask(cancellationToken: ct);

            await publisher.PublishAsync("Bye!").ToUniTask(cancellationToken: ct);
        }
        public MainWindowViewModel(IAsyncMessagePublisher messagePublisher)
        {
            MessagePublisher = messagePublisher;
            Message          = new ReactivePropertySlim <string>();

            AlertCommand = new AsyncReactiveCommand()
                           .WithSubscribe(async() =>
            {
                var alertMessage = new ConfirmMessage
                {
                    Title   = "Info",
                    Content = "Hello world",
                };
                await MessagePublisher.PublishAsync(alertMessage);
                Message.Value = $"{alertMessage.MessageBoxResult} が押されました。";
            });
        }