public async Task Start(ParseMessage parseMessage) { _source = new CancellationTokenSource(); PeriodicTaskAction <object, CancellationToken> keepChannel = (async(object o, CancellationToken t) => { if (_webSocketClient == null) { _webSocketClient = new ClientWebSocket(); _webSocketClient.Options.KeepAliveInterval = new TimeSpan(keepAliveSocketInterval * TimeSpan.TicksPerSecond); await SocketConnect(parseMessage); } else if (_webSocketClient.State != WebSocketState.Open && _webSocketClient.State != WebSocketState.Connecting) { _webSocketClient.Dispose(); _webSocketClient = new ClientWebSocket(); _webSocketClient.Options.KeepAliveInterval = new TimeSpan(keepAliveSocketInterval * TimeSpan.TicksPerSecond); await SocketConnect(parseMessage); } } ); tickerchnl = new PeriodicTaskWrapper(_logger, _name); await tickerchnl.Start(keepChannel, new PeriodicTaskParams { period = (int)keepAliveSecs * 1000 }, _source.Token); }
public async Task Start(PeriodicTaskAction <object, CancellationToken> action, PeriodicTaskParams param, CancellationToken _token) { PeriodicTaskAction <object, CancellationToken> _action = action; object o = null; if (param.delay != 0) { await Task.Delay(param.delay); } _task = Task.Run(async() => { while (!_token.IsCancellationRequested) { try { await _action(o, _token); } catch (Exception ex) { _loger.Log(LogPriority.Debug, $"Exception: {ex.Message} {ex.StackTrace}", _name); } finally { await Task.Delay(param.period, _token); } } } ); }