WaitToAsync improvements

This commit is contained in:
Loretta 2024-08-26 16:35:03 +02:00
parent fc4966c0dd
commit 8ead31eb4b
1 changed files with 7 additions and 3 deletions

View File

@ -2,16 +2,18 @@
{ {
public static class TaskHelper public static class TaskHelper
{ {
public static bool WaitTo(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5) public static bool WaitTo(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5, int msFirstDelay = 0)
=> WaitToAsync(predicate, msTimeout, msDelay).GetAwaiter().GetResult(); => WaitToAsync(predicate, msTimeout, msDelay, msFirstDelay).GetAwaiter().GetResult();
public static Task<bool> WaitToAsync(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5) public static Task<bool> WaitToAsync(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5, int msFirstDelay = 0)
{ {
return ToThreadPoolTask(async () => return ToThreadPoolTask(async () =>
{ {
var result = false; var result = false;
var dtTimeout = DateTime.UtcNow.AddMilliseconds(msTimeout).Ticks; var dtTimeout = DateTime.UtcNow.AddMilliseconds(msTimeout).Ticks;
if (msFirstDelay > 0) await Task.Delay(msFirstDelay);
while (dtTimeout > DateTime.UtcNow.Ticks && !(result = predicate())) while (dtTimeout > DateTime.UtcNow.Ticks && !(result = predicate()))
await Task.Delay(msDelay).ConfigureAwait(false); //Thread.Sleep(msDelay); 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 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 Action action) => ToThreadPoolTask(action).Forget();
public static void RunOnThreadPool<T>(this Func<T> func) => ToThreadPoolTask(func).Forget(); public static void RunOnThreadPool<T>(this Func<T> func) => ToThreadPoolTask(func).Forget();
public static Task ToThreadPoolTask(this Action action) => Task.Run(action); public static Task ToThreadPoolTask(this Action action) => Task.Run(action);
//public static Task ToThreadPoolTask(this Task task) => Task.Run(() => _ = task); //public static Task ToThreadPoolTask(this Task task) => Task.Run(() => _ = task);
//public static void ToParallelTaskStart(this Task task) => task.Start(); //public static void ToParallelTaskStart(this Task task) => task.Start();
//public static Task<T> ToThreadPoolTask<T>(this Task<T> task) => Task.Run(() => task); //public static Task<T> ToThreadPoolTask<T>(this Task<T> task) => Task.Run(() => task);