From 8ead31eb4bd130d0c8dc63e21162df1cc2aa5f11 Mon Sep 17 00:00:00 2001 From: Loretta Date: Mon, 26 Aug 2024 16:35:03 +0200 Subject: [PATCH] WaitToAsync improvements --- AyCode.Core/Helpers/TaskHelper.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/AyCode.Core/Helpers/TaskHelper.cs b/AyCode.Core/Helpers/TaskHelper.cs index 8e14efe..0041996 100644 --- a/AyCode.Core/Helpers/TaskHelper.cs +++ b/AyCode.Core/Helpers/TaskHelper.cs @@ -2,16 +2,18 @@ { public static class TaskHelper { - public static bool WaitTo(Func predicate, int msTimeout = 10000, int msDelay = 5) - => WaitToAsync(predicate, msTimeout, msDelay).GetAwaiter().GetResult(); + public static bool WaitTo(Func predicate, int msTimeout = 10000, int msDelay = 5, int msFirstDelay = 0) + => WaitToAsync(predicate, msTimeout, msDelay, msFirstDelay).GetAwaiter().GetResult(); - public static Task WaitToAsync(Func predicate, int msTimeout = 10000, int msDelay = 5) + public static Task WaitToAsync(Func predicate, int msTimeout = 10000, int msDelay = 5, int msFirstDelay = 0) { return ToThreadPoolTask(async () => { var result = false; var dtTimeout = DateTime.UtcNow.AddMilliseconds(msTimeout).Ticks; + if (msFirstDelay > 0) await Task.Delay(msFirstDelay); + while (dtTimeout > DateTime.UtcNow.Ticks && !(result = predicate())) await Task.Delay(msDelay).ConfigureAwait(false); //Thread.Sleep(msDelay); @@ -60,7 +62,9 @@ //public static void RunOnThreadPool(this Task task) => Task.Run(() => _ = task).Forget(); //TODO: Letesztelni, a ThreadId-kat! - J. public static void RunOnThreadPool(this Action action) => ToThreadPoolTask(action).Forget(); public static void RunOnThreadPool(this Func func) => ToThreadPoolTask(func).Forget(); + public static Task ToThreadPoolTask(this Action action) => Task.Run(action); + //public static Task ToThreadPoolTask(this Task task) => Task.Run(() => _ = task); //public static void ToParallelTaskStart(this Task task) => task.Start(); //public static Task ToThreadPoolTask(this Task task) => Task.Run(() => task);