ProcrastiN8 0.1.1-prerelease0001
See the version list below for details.
dotnet add package ProcrastiN8 --version 0.1.1-prerelease0001
NuGet\Install-Package ProcrastiN8 -Version 0.1.1-prerelease0001
<PackageReference Include="ProcrastiN8" Version="0.1.1-prerelease0001" />
<PackageVersion Include="ProcrastiN8" Version="0.1.1-prerelease0001" />
<PackageReference Include="ProcrastiN8" />
paket add ProcrastiN8 --version 0.1.1-prerelease0001
#r "nuget: ProcrastiN8, 0.1.1-prerelease0001"
#:package ProcrastiN8@0.1.1-prerelease0001
#addin nuget:?package=ProcrastiN8&version=0.1.1-prerelease0001&prerelease
#tool nuget:?package=ProcrastiN8&version=0.1.1-prerelease0001&prerelease
π’ ProcrastiN8
Because shipping is optional.
ProcrastiN8 is a C#/.NET utility library for developers who embrace the art of strategic procrastination. Whether you're stalling creatively or just simulating productivity, this package provides humorous, overengineered, yet technically valid tools to help you do less β better β later.
β¨ Features
Eventually.Do(...)
: Execute tasks... eventually. Now with excuses and jitter.FakeProgress
: Simulate infinite progress to impress stakeholders.InfiniteSpinner
: A CPU-hungry animation loop of meaningless motion.BusyWaitSimulator
: Burn cycles under the guise of being very busy.RetryUntilCancelled
: Retries operations forever (or until someone gives up).QuantumEntanglementRegistry
: Link async operations through questionable physics metaphors.ExcuseGenerator
: Generate plausible (or implausible) reasons for delay.CommentaryService
: Structured procrastination commentary, fully injectable.DelayStrategy
: Pluggable, testable delay logic (coming soon).ProcrastinationMetrics
: Track and analyze your stalling performance (coming soon).[Todo]
attributes and schedulers that do absolutely nothing.- Randomized exception injectors β because chaos is healthy.
- Extensions for generating excuses, procrastinating DateTimes, and more.
- Support for structured logging (without mandatory dependencies).
- Playful, absurd, but built with real care.
π§ββοΈ Getting Started
π§ Installation
dotnet add package ProcrastiN8 --prerelease
# Because release-readiness is a social construct.
Or via the NuGet Package Manager:
Install-Package ProcrastiN8 -Prerelease
# Because final releases are for the overly decisive.
π Usage Example
using ProcrastiN8.LazyTasks;
await Eventually.Do(async () =>
{
Console.WriteLine("Actually doing something now...");
});
Expected output:
[Eventually] Thinking about it... Might do it in 17.3s.
[Eventually] Reason for delay: Blocked by a third-party library.
[Eventually] Just five more minutes...
...
[Eventually] Finally did the thing. You're welcome.
π API Highlights
Eventually.Do(...)
Task Eventually.Do(
Func<Task> action,
TimeSpan? within = null,
string? excuse = null,
IProcrastiLogger? logger = null,
CancellationToken cancellationToken = default)
within
: Maximum delay before action is executed (default: 30s).excuse
: Optional string to justify the delay (seeExcuseGenerator
).logger
: Optional logger (customIProcrastiLogger
interface).- Logs procrastination chatter while stalling.
RetryUntilCancelled
Task RetryUntilCancelled.Do(
Func<Task> action,
IProcrastiLogger? logger = null,
IExcuseProvider? excuseProvider = null,
IRetryStrategy? retryStrategy = null,
CancellationToken cancellationToken = default)
- Retries the action until cancellation or despair.
- Fully injectable for testability (excuses, delays, logging).
QuantumEntanglementRegistry<T>
public class QuantumEntanglementRegistry<T>
- Entangle and collapse async operations in ways that defy reason.
- Thread-safe, for those who pretend it matters.
FakeProgress
, InfiniteSpinner
, BusyWaitSimulator
- Simulate the appearance of productivity with endless progress, spinning, or busy-waiting.
- All support cancellation and logging.
π§ͺ Testing Standards
ProcrastiN8 is built for testability and over-abstraction:
- Unit tests: xUnit
- Mocks: NSubstitute (no exceptions)
- Assertions: AwesomeAssertions (for expressive, readable tests)
- Delays/timing: Always injectable/faked
- Logging: Always via
IProcrastiLogger
or test double - Absurdity: Every test must acknowledge the futility of its own existence
Example:
[Fact]
public async Task Eventually_Should_Delay_Execution_And_Log_Excuse()
{
var logger = Substitute.For<IProcrastiLogger>();
var called = false;
await Eventually.Do(() =>
{
called = true;
return Task.CompletedTask;
}, excuse: "Just five more minutes", logger: logger);
called.Should().BeTrue("eventual execution is still execution");
await logger.Received().Info(Arg.Is<string>(m => m.Contains("Just five more minutes")));
}
π New & Experimental
Feature | Description |
---|---|
InfiniteSpinner.Start() |
Loops endlessly to simulate doing something. CPU usage is part of the fun. |
BusyWaitSimulator.Run() |
Consumes time with zero productivity. |
RetryUntilCancelled |
Retries until you cancel or give in. No exponential backoff β just hope. |
QuantumEntanglementRegistry |
Links promises. Collapse one and see what happens. No guarantees. |
FakeProgress.Start() |
Loops endlessly at ~98%. Adds legitimacy to indecision. |
DelayStrategy |
Pluggable, testable delay logic (coming soon). |
ProcrastinationMetrics |
Track and analyze your stalling performance (coming soon). |
πͺ΅ Logging Support
ProcrastiN8 uses a lightweight, pluggable logger abstraction:
public interface IProcrastiLogger
{
void Info(string message);
void Debug(string message);
void Error(string message, Exception? ex = null);
}
You can use your own implementation or adapt to Microsoft.Extensions.Logging
:
var logger = new MELAdapter(myILogger); // from ProcrastiN8.Adapters.MEL
await Eventually.Do(action, logger: logger);
πͺ Roadmap
-
QuantumEntanglementRegistry
for chaotic promise behavior -
FakeProgress
,InfiniteSpinner
, andBusyWaitSimulator
-
RetryUntilCancelled
with structured commentary - Robust, over-abstracted test suite (NSubstitute, AwesomeAssertions)
-
DelayStrategy
support (e.g., exponential backoff with excuses) -
ProcrastinationMetrics
(e.g. average delay, skipped deadlines) - NuGet sub-packages:
ProcrastiN8.Logging.MEL
,ProcrastiN8.Tracing
- Integration with GPT for dynamically generated excuses
- Remove
--pre-release
from install instructions (ETA: when the universe reaches heat death)
π― Why?
βDon't put off until tomorrow what you can avoid indefinitely with style.β β someone, probably
This library is both satire and a gentle commentary on developer behavior. But itβs also built with care, type safety, testability, and extensibility in mind.
π§ͺ Requirements
- .NET 6.0 or higher
- No runtime dependencies
- Logging is optional and pluggable
π¨βπ§ Author
Made by @veggerby β overengineer, software architect, and semi-professional excuse generator.
βοΈ License
MIT. Free to use, fork, delay, or completely ignore.
π§ Bonus Tip
var bar = new FakeProgress("Deploying to Production");
bar.Start();
// Just sit back. No one will question a 98% loading bar.
Or go quantum:
var registry = new QuantumEntanglementRegistry<string>();
registry.Entangle(someQuantumPromise);
await registry.CollapseOneAsync(); // Reality may vary
β If you actually read this far, you're probably procrastinating something important. You're in good company.
Product | Versions 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 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 is compatible. 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. |
-
net6.0
- No dependencies.
-
net8.0
- No dependencies.
-
net9.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 |
---|---|---|
0.1.1-prerelease0045 | 144 | 8/24/2025 |
0.1.1-prerelease0037 | 142 | 8/24/2025 |
0.1.1-prerelease0019 | 94 | 7/30/2025 |
0.1.1-prerelease0018 | 90 | 7/29/2025 |
0.1.1-prerelease0017 | 91 | 7/29/2025 |
0.1.1-prerelease0016 | 91 | 7/28/2025 |
0.1.1-prerelease0015 | 91 | 7/28/2025 |
0.1.1-prerelease0011 | 95 | 7/28/2025 |
0.1.1-prerelease0009 | 95 | 7/28/2025 |
0.1.1-prerelease0008 | 89 | 7/28/2025 |
0.1.1-prerelease0001 | 93 | 7/27/2025 |
0.1.0-prerelease0001 | 509 | 7/22/2025 |
Built by procrastination, driven by satire.