Josupeit.Practices.Jobs.Core
1.1.3
Prefix Reserved
dotnet add package Josupeit.Practices.Jobs.Core --version 1.1.3
NuGet\Install-Package Josupeit.Practices.Jobs.Core -Version 1.1.3
<PackageReference Include="Josupeit.Practices.Jobs.Core" Version="1.1.3" />
<PackageVersion Include="Josupeit.Practices.Jobs.Core" Version="1.1.3" />
<PackageReference Include="Josupeit.Practices.Jobs.Core" />
paket add Josupeit.Practices.Jobs.Core --version 1.1.3
#r "nuget: Josupeit.Practices.Jobs.Core, 1.1.3"
#:package Josupeit.Practices.Jobs.Core@1.1.3
#addin nuget:?package=Josupeit.Practices.Jobs.Core&version=1.1.3
#tool nuget:?package=Josupeit.Practices.Jobs.Core&version=1.1.3
Josupeit.Practices.Jobs.Core
This package contains JobBase, the abstract base class that both TaskPoolJobFactory and SchedulerJobFactory build their concrete job types on. You would typically reach for this package only when you need to implement a completely custom job type — for instance, one that integrates with a third-party execution engine — while still fitting into the IJob-based observable model.
If you just need to run async delegates as trackable jobs, one of the two ready-made factories is almost certainly the better choice.
dotnet add package Josupeit.Practices.Jobs.Core
What JobBase provides
JobBase supplies everything that is common across all job types:
- A stable
Id(Guid.NewGuid()at construction time) - The five boolean state properties (
IsPending,IsExecuting,IsCompleted,IsCompletedSuccessfully,IsFaulted,IsCanceled) - The
Exceptionproperty for faulted outcomes - The
Changedevent and the protectedOnChanged()hook - A
CancellationTokenSourceexposed asCancellationTokento subclasses Cancel()— cancels the token on a thread-pool thread to avoid deadlocks- Guard methods
ThrowIfCannotStart()andThrowIfCannotCancel()to enforce valid transitions
How to implement a custom job
Extend JobBase, implement Start(), and use the protected Notify* methods to advance state and fire Changed.
public sealed class MyCustomJob : JobBase, IJob
{
private readonly Func<CancellationToken, Task> _work;
public MyCustomJob(Func<CancellationToken, Task> work) => _work = work;
public override void Start()
{
ThrowIfCannotStart();
NotifyPending();
// Fire and forget — state transitions happen inside ExecuteCoreAsync.
_ = ExecuteCoreAsync();
}
private async Task ExecuteCoreAsync()
{
NotifyExecuting();
try
{
await _work(CancellationToken);
IsCompletedSuccessfully = true;
IsCompleted = true;
IsExecuting = false;
OnChanged();
}
catch (OperationCanceledException)
{
NotifyCanceled();
}
catch (Exception ex)
{
NotifyFailed(ex);
}
}
}
| 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. 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. |
| .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. |
-
.NETStandard 2.0
- Josupeit.Practices.Jobs.Abstractions (>= 1.0.0 && < 2.0.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Josupeit.Practices.Jobs.Core:
| Package | Downloads |
|---|---|
|
Josupeit.Practices.Jobs.Scheduler
IJobFactory that routes job execution through an IScheduler for sequential ordering, bounded parallelism, and pause support. |
|
|
Josupeit.Practices.Jobs.TaskPool
Thread pool IJobFactory implementation. Creates observable jobs with support for results, progress reporting, and cancellation — no scheduler setup required. |
GitHub repositories
This package is not used by any popular GitHub repositories.
- Fixes release notes being empty when packing at a tagged commit;- Bumps Jobs.Abstractions, Jobs.Core and Jobs.Scheduler to 1.1;- Propagates ScheduleAsync errors to SchedulerJob