private Task <XStorage> _StorageTarget(string s, XStorage o, CancellationTokenSource cts)
        {
            return(new Task <XStorage>(() =>
            {
                var data = default(XStorage);
                var topic = (s + ":" + o.Key).ToLower();
                var working = true;
                var listener = new Listener(topic,
                                            message =>
                {
                    data = this.XSocketClient.Serializer.DeserializeFromString <XStorage>(message.Data);
                    working = false;
                },
                                            SubscriptionType.One);

                this._listeners.AddOrUpdate(topic, listener);

                this.Invoke(s, o);
                var r = SpinWait.SpinUntil(() => working == false, 60000);

                if (r == false)
                {
                    this.DisposeListener(listener);
                    throw new TimeoutException("The server did not respond in the given time frame");
                }


                return data;
            }));
        }
        private Task <XStorage> StorageWaitFor(string topic, XStorage data, CancellationTokenSource cts)
        {
            var waiter = _StorageTarget(topic, data, cts);

            waiter.Start();
            return(waiter);
        }
        private async Task <XStorage> StorageWaitFor(string topic, XStorage data, CancellationTokenSource cts)
        {
            return(await _StorageTarget(topic, data, cts));

            //waiter.Start();
            //return waiter;
        }