43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
using System.Numerics;
|
|
|
|
namespace GottfriedsNackenUtility;
|
|
|
|
/// <summary>
|
|
/// Hier sind suspiziöse Funktionen versteckt.
|
|
/// </summary>
|
|
public static class SusHelper
|
|
{
|
|
/// <summary>
|
|
/// Dies ist der ausgeklügelste fake-Fortschrittbalkensalgorithmus den die Welt je erblickt hat.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Dieser Task läuft in einer Endlosschleife und MUSS mit Hilfe des Abbruchtokens abgebrochen werden!
|
|
/// </remarks>
|
|
/// <param name="progressChangedCallback">Das callback das aufgerufen wird, wenn der Fortschritt sich geändert hat.
|
|
/// Gibt einen Int zwischen 0 und 100 zurück oder -1, wenn der Fortschrittsbalken auf einen "indefinite" Zustand wechseln soll.</param>
|
|
/// <param name="cancellationToken">Ein Abbruchtoken, das beim Warten auf den Abschluss der Aufgabe überwacht werden soll.</param>
|
|
public static async Task UpdateDefinitelyNotFakeProgress(Action<int> progressChangedCallback, CancellationToken cancellationToken)
|
|
{
|
|
try
|
|
{
|
|
foreach (BigInteger fibonacci in MathHelper.Fibonacci())
|
|
{
|
|
await Task.Delay(250 + (int)(fibonacci % 420), cancellationToken);
|
|
|
|
if (cancellationToken.IsCancellationRequested)
|
|
break;
|
|
|
|
if (fibonacci.IsEven && (int)(fibonacci % 42) == 0)
|
|
{
|
|
progressChangedCallback(-1);
|
|
await Task.Delay(1337, cancellationToken);
|
|
continue;
|
|
}
|
|
|
|
progressChangedCallback((int)(fibonacci % 69));
|
|
}
|
|
}
|
|
catch (TaskCanceledException) { }
|
|
}
|
|
}
|