Job.Library
2.0.0
The owner has unlisted this package.
This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package Job.Library --version 2.0.0
NuGet\Install-Package Job.Library -Version 2.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="Job.Library" Version="2.0.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Job.Library" Version="2.0.0" />
<PackageReference Include="Job.Library" />
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Job.Library --version 2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Job.Library, 2.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.
#:package Job.Library@2.0.0
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Job.Library&version=2.0.0
#tool nuget:?package=Job.Library&version=2.0.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Akka.NET Jobs.
How to use.
Runs background Jobs.
- Run the Jobs in the background and get its ID.
- Get the current state of a running Job by JobId.
- Stop a running Job.
- The DI scope for the Job.
- Has the ability to set the number of restarts in case of an error.
In the Program.cs file, register the Job interface and the Job Context for your ...Job class.
//Job library registration
builder.Services.AddScoped<IJob<ForEachJobInput, ForEachJobResult>, ForEachJob>();
builder.Services.AddJobContext();
Next, for the job class, you need to implement the IJob interface.
public interface IJob<in TIn, out TOut>
where TIn : IJobInput
where TOut : IJobResult
{
Task<bool> DoAsync(TIn input, CancellationToken token);
TOut GetCurrentState(Guid jobId);
}
For example, the implementation of IJob for ForEachJob, which simply iterates through the values from 0 to Count in a loop.
public class ForEachJob : IJob<ForEachJobInput, ForEachJobResult>
{
private int _currentState;
private readonly ILogger<ForEachJob> _logger;
//It is possible to inject any registered interface
public ForEachJob(ILogger<ForEachJob> logger)
{
_logger = logger;
}
public async Task<bool> DoAsync(ForEachJobInput input, CancellationToken token)
{
foreach (var item in Enumerable.Range(0, input.Count))
{
if (token.IsCancellationRequested)
return false;
_currentState = item;
_logger.LogInformation(item.ToString());
await Task.Delay(1000, token);
}
return true;
}
//Describes the state of the fields of the IJob class that are changed by the DoAsync method.
public ForEachJobResult GetCurrentState(Guid jobId)
{
return new ForEachJobResult
{
Id = jobId,
Data = _currentState
};
}
}
public class ForEachJobInput : IJobInput
{
public int Count { get; set; }
}
public class ForEachJobResult : IJobResult
{
public Guid Id { get; set; }
public int Data { get; set; }
}
Next, IJobContext is injected for the corresponding input and output parameters of the job.
public interface IJobContext<in TIn, TOut>
where TIn : IJobInput
where TOut : IJobResult
{
/// <summary>
/// Create a background job
/// </summary>
/// <returns>Job Id</returns>
Guid CreateJob(TIn input,
int? maxNrOfRetries = null, TimeSpan? minBackoff = null, TimeSpan? maxBackoff = null, Guid? jobId = null, TimeSpan? timeout = null);
/// <summary>
/// Waiting for a response about the completion of the job
/// </summary>
Task<JobCommandResult> DoJobAsync(TIn input,
int? maxNrOfRetries = null, TimeSpan? minBackoff = null, TimeSpan? maxBackoff = null, Guid? jobId = null, TimeSpan? timeout = null);
Task<StopJobCommandResult> StopJobAsync(Guid jobId, TimeSpan? timeout = null);
Task<IDictionary<Guid, ReplyWorkerInfo<TOut>>> GetAllJobsCurrentStatesAsync(long requestId, TimeSpan? timeout = null);
}
Controller
private readonly IJobContext<ForEachJobInput, ForEachJobResult> _jobContext;
public ForEachJobController(IJobContext<ForEachJobInput, ForEachJobResult> jobContext)
{
_jobContext = jobContext;
}
[HttpPost]
[Route(nameof(CreateJob))]
public Guid CreateJob([FromBody] ForEachJobInput input)
{
return _jobContext.CreateJob(input); //Immediately returns the ID of a background task
}
[HttpGet]
[Route(nameof(GetAllJobs))]
public async Task<ICollection<ForEachJobResult?>> GetAllJobs([FromQuery] int requestId)
{
var result = await _jobContext
.GetAllJobsCurrentStatesAsync(requestId);
return result.Values.Select(x => x.Result).ToList();
}
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
-
net8.0
- Akka (>= 1.5.25)
- Akka.DependencyInjection (>= 1.5.25)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.1)
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 |
|---|