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; }