public Guid SetInterval(JavaScriptValue callback, int delay) { if (callback.ValueType != JavaScriptValueType.Function) { throw new ArgumentException("SetInterval only accepts javascript function"); } CancellationTokenSource source = new CancellationTokenSource(); Guid id = addCallback(callback, source); Action a = ServiceNode.GetService <IJSValueConverterService>().FromJSValue <Action>(callback); Task.Factory.StartNew(async() => { while (true) { try { await Task.Delay(delay, source.Token); a(); } catch (OperationCanceledException) { return; } catch (Exception) { throw; } } }, source.Token); return(id); }