pvWay.agentPoolManager.nc6 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package pvWay.agentPoolManager.nc6 --version 1.0.0                
NuGet\Install-Package pvWay.agentPoolManager.nc6 -Version 1.0.0                
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="pvWay.agentPoolManager.nc6" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add pvWay.agentPoolManager.nc6 --version 1.0.0                
#r "nuget: pvWay.agentPoolManager.nc6, 1.0.0"                
#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 pvWay.agentPoolManager.nc6 as a Cake Addin
#addin nuget:?package=pvWay.agentPoolManager.nc6&version=1.0.0

// Install pvWay.agentPoolManager.nc6 as a Cake Tool
#tool nuget:?package=pvWay.agentPoolManager.nc6&version=1.0.0                

Agent Pool Manager Core

Manages a pool of asynchronous methods (agents) that keep repeating at a given interval until they are requested to stop. This lets your IIS Web applicaiton runs a pool of tasks in the background.

Interfaces

This nuGet has only one public class implementing the following interface

IAgentPoolManager

using System;
using System.Collections.Generic;
using System.Threading;

namespace pvWay.AgentPoolManager.Core
{
    public interface IAgentPoolManager
    {
        IEnumerable<IAgent> Agents { get; }

        IAgent GetAgent(Guid id);

        IAgent StartAgent<T>(
            string title,
            Action<T> repeat,
            T workerParam,
            TimeSpan sleepSpan,
            ThreadPriority priority = ThreadPriority.Normal,
            Action<IAgent> stopCallback = null);

        IAgent StartAgent(
            string title,
            Action repeat,
            TimeSpan sleepSpan,
            ThreadPriority priority = ThreadPriority.Normal,
            Action<IAgent> stopCallback = null);
    }
}

IAgent

using System;

namespace pvWay.AgentPoolManager.Core
{
    public interface IAgent
    {
        Guid Id { get; }
        DateTime StartTimeUtc { get; }
        string Title { get; }
        void RequestToStop();
    }
}

Usage

See here after a short Console that use the pool

Principe

  • Create a method (with or without parameter) that you want to repeatedly invoke in background
  • Determine the interval of time between two invocations of your method
  • Instantiate the PoolManager (you can wrap/inject this class into/as a Singleton)
  • Add your method into the Agent Pool and in return get a IAgent reference
  • Stop the method at any time by calling the IAgent RequestToStop method

The following example shows the code for a simple clock pulsar that write the time in the console every 5 seconds.

The code

using System;
using System.Threading;
using pvWay.AgentPoolManager.Core;

namespace AgentPoolManagerLab.Core
{
    internal static class Program
    {
        private static void Main(/*string[] args*/)
        {
            var apm = new PoolManager();

            var pulsar = apm.StartAgent(
                // the name of the asynchronous agent
                "pulsar",
                // the method to repeat asynchronously
                Pulsar,
                // the string param passed to the Pulsar method
                "clock",
                // time between each invocation
                TimeSpan.FromSeconds(5),
                // the priority
                ThreadPriority.Normal,
                // the lambda that is called when the pulsar is stopped
                agent => Console.WriteLine($"{agent.Title} is stopped"));

            Console.WriteLine("hit a key to stop");
            Console.ReadKey();

            pulsar.RequestToStop();

            Console.WriteLine("hit a key to quit");
            Console.ReadKey();
        }

        private static void Pulsar(string prefix)
        {
            Console.WriteLine($"{prefix}-{DateTime.Now:HH:mm:ss}");
        }

    }
}

Happy coding

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.0.0 142 1/25/2024
1.0.1 104 1/25/2024
1.0.0 325 4/7/2023

initial