Metronome.NET
1.1.1.4
dotnet add package Metronome.NET --version 1.1.1.4
NuGet\Install-Package Metronome.NET -Version 1.1.1.4
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Metronome.NET" Version="1.1.1.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Metronome.NET --version 1.1.1.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Metronome.NET, 1.1.1.4"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Metronome.NET as a Cake Addin
#addin nuget:?package=Metronome.NET&version=1.1.1.4
// Install Metronome.NET as a Cake Tool
#tool nuget:?package=Metronome.NET&version=1.1.1.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Metronome.NET
A Pulsing Callback that will Execute
a Task
or Action
every 0.5ms
to 2ms
depending on how many Workers
are used
Doesn't use much CPU.
Basic Usage:
public static Metronome Metronome { get; set; } = new Metronome();
Metronome.Start(exampleTask);
Metronome.Stop();
Metronome.IsWorkersStopped
public Task exampleTask()
{
try
{
// Your Work
}
catch
{
// Unhandled Exceptions will kill the worker use try/catch/ignore if unsure
}
finally
{
}
return Task.CompletedTask;
}
Test:
Default (3 Workers)
public static Metronome Metronome { get; set; } = new Metronome();
public Action exampleAction = () =>
{
try
{
//Delay.Wait(100);
// Your Work
}
catch
{
// Ignore
// Unhandled Exceptions will kill the worker use try/catch/ignore if unsure
}
finally
{
count++;
}
};
public Task exampleTask()
{
try
{
//await Task.Delay(100).ConfigureAwait(false);
// Your Work
}
catch
{
// Ignore
// Unhandled Exceptions will kill the worker use try/catch/ignore if unsure
}
finally
{
count++;
}
return Task.CompletedTask;
}
/// <summary>
/// Metronome Test
/// </summary>
public MainContext()
{
Task.Run(async () =>
{
count = 0;
decimal delay = 20000m;
SomeVM.TaskResult = "Running Test";
Metronome.Start(exampleTask);
await Task.Delay((int)delay).ConfigureAwait(false);
Metronome.Stop();
var outputTask = "Count: " + count + "| Average Task Time: " + (count > 0 ? delay / count : 0) + "ms";
SomeVM.TaskResult = outputTask;
Console.WriteLine(outputTask);
Console.WriteLine("Stopped: " + Metronome.IsWorkersStopped);
count = 0;
SomeVM.ActionResult = "Running Test";
Metronome.Start(exampleAction);
await Task.Delay((int)delay).ConfigureAwait(false);
Metronome.Stop();
var outputAction = "Count: " + count + "| Average Action Time: " + (count > 0 ? delay / count : 0) + "ms";
SomeVM.ActionResult = outputAction;
Console.WriteLine(outputAction);
Console.WriteLine("Stopped: " + Metronome.IsWorkersStopped);
}).ConfigureAwait(false);
}
Output:
Count: 57585| Average Task Time: 0.3473126682295736736997481983ms
Stopped: True
Count: 58307| Average Action Time: 0.3430119882689900012005419589ms
Stopped: True
<0.01% CPU
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
.NETStandard 2.0
- High_Resolution_Sleep (>= 1.1.2.5)
- PrecisionTimer.NET (>= 2.4.0.4)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.