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 bool WaitTo(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5)
=> WaitToAsync(predicate, msTimeout, msDelay).GetAwaiter().GetResult();
public static bool WaitTo(Func<bool> predicate, int msTimeout = 10000, int msDelay = 5, int msFirstDelay = 0)
=> 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 () =>
{
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<T>(this Func<T> 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<T> ToThreadPoolTask<T>(this Task<T> task) => Task.Run(() => task);