using SharpPromise; using System; using System.Threading.Tasks; namespace DM_Weight.util { public class PromiseUtil { public int _delay { get; set; } public T? _data { get; set; } public async Task taskAsyncLoop(int delay, T data, Action, Action, Action> action) { _data = data; _delay = 0; while (_delay >= 0) { await new Promise(async (Action onResolve, Action onReject) => { await Task.Delay(_delay); try { await Task.Run(() => action(this, onResolve, onReject)); } catch (Exception ex) { onReject(); } }).Then(() => { _delay = delay; }).Catch((Exception e) => { _delay = -1; }); } } } }