{"id":8942627,"name":"taskhandler","ecosystem":"nuget","description":"A simple C# class library to help manage running a queue of tasks without relinquishing control.","homepage":"https://github.com/jchristn/TaskHandler","licenses":"mit","normalized_licenses":["MIT"],"repository_url":"https://github.com/jchristn/TaskHandler","keywords_array":["task","queue","work","scheduler","priority","qos","fair-queuing","telemetry","opentelemetry","metrics","tracing"],"namespace":null,"versions_count":16,"first_release_published_at":"2023-09-29T18:55:34.293Z","latest_release_published_at":"2026-10-03T19:24:47.223Z","latest_release_number":"2.4.2","last_synced_at":"2026-10-03T19:33:36.297Z","created_at":"2024-02-26T03:14:45.225Z","updated_at":"2026-10-04T00:25:35.856Z","registry_url":"https://www.nuget.org/packages/taskhandler/","install_command":"Install-Package taskhandler","documentation_url":null,"metadata":{"copyright":"(c)2026 Joel Christner","license_info":{"type":"file","text":"LICENSE.md","version":null},"license_url":"https://aka.ms/deprecateLicenseUrl","require_license_acceptance":false,"icon":"logo.png","readme":"README.md","repository":{"type":"github","url":"https://github.com/jchristn/TaskHandler","branch":null,"commit":"26cf3590e601d05f6720526a80b7a6e0644b8738"},"development_dependency":false,"serviceable":false,"framework_assemblies":[],"package_types":[],"release_notes":"v2.4.2: No library code changes. Updated System.Threading.Channels, System.Diagnostics.DiagnosticSource, and Microsoft.Bcl.AsyncInterfaces to 10.0.12 (netstandard targets); test hosts moved to Touchstone 0.2.0 and NUnit 5. v2.4.1: No library code changes. Adds a QoS Disciplines test suite proving weighted fair, aging, class-based, weighted round robin, and low-latency scheduling through TaskQueue (each mutation-checked against FIFO); docs updated. v2.4.0: Opt-in QoS scheduling. FIFO stays the default; pass a QoSKit queue (TaskQueue(IQoSQueue\u003cTaskDetails\u003e) or TaskQueueOptions.Scheduler) to start tasks by strict priority with aging, weighted fairness per tenant, and other disciplines, with the scheduler providing capacity and overflow policy. MaxConcurrentTasks can now be changed on a live queue; MaxQueueSize changes after first use throw instead of being ignored. Adds a QoSKit dependency. v2.3.0: Lifecycle fixes. Stop() retains unstarted tasks (they run after the next Start()) and tasks can be added while stopped; Dispose() completes every unstarted task as canceled (handles canceled, OnTaskCanceled fired) instead of hanging; each task raises exactly one terminal event; OnProcessingStopped fires once; Stop(guid) cancels queued tasks; adding after dispose throws ObjectDisposedException; StopAsync(waitForCompletion) and IsRunning fixed; fixed a hang when disposing with a task waiting for a slot. v2.2.0: Added built-in observability. TaskQueue and TaskRunWithTimeout emit OpenTelemetry-shaped metrics and traces through the BCL Meter and ActivitySource named TaskHandler (queue depth, concurrency in use, per-stage durations, outcomes, rejections, cancellations, errors by type), with trace context propagated from enqueue into task code. New TaskQueue.Name and TaskQueueOptions.Name label each queue. No new runtime dependency on net8.0+; netstandard targets add System.Diagnostics.DiagnosticSource. See TELEMETRY.md. v2.1.1: Fixed result-returning EnqueueAsync\u003cT\u003e overloads so that a task exceeding its timeout completes the TaskHandle\u003cT\u003e with a TimeoutException (previously it double-completed the handle, surfacing a cancellation plus an InvalidOperationException fault). Hardened TaskHandle\u003cT\u003e completion to be idempotent. Updated System.Threading.Channels and Microsoft.Bcl.AsyncInterfaces to 10.0.11. v2.1.0: Retargeted to net8.0 and net10.0 (dropped net6.0); still supports netstandard2.0 and netstandard2.1. v2.0.0: Event-driven architecture (10-100x faster), async API (StartAsync, StopAsync, DisposeAsync), task results (TaskHandle\u003cT\u003e), priorities, timeouts, statistics, progress reporting. BREAKING: Removed IterationDelayMs and QueuedTasks properties.","dependency_summary":{"total_dependency_groups":4,"target_frameworks":["net10.0","net8.0",".NETStandard2.0",".NETStandard2.1"],"total_dependencies":9},"verified":false},"repo_metadata":{"id":197263889,"uuid":"698367599","full_name":"jchristn/TaskHandler","owner":"jchristn","description":"A simple C# class library to help manage running a queue of tasks without relinquishing control.","archived":false,"fork":false,"pushed_at":"2026-10-03T07:23:48.000Z","size":239,"stargazers_count":13,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-10-03T15:47:17.768Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jchristn.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-09-29T18:53:22.000Z","updated_at":"2026-10-03T07:23:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"d52b6cb1-5245-422b-8b42-ae4b90f1fdfd","html_url":"https://github.com/jchristn/TaskHandler","commit_stats":null,"previous_names":["jchristn/taskhandler"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jchristn/TaskHandler","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2FTaskHandler","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2FTaskHandler/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2FTaskHandler/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2FTaskHandler/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jchristn","download_url":"https://codeload.github.com/jchristn/TaskHandler/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2FTaskHandler/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343072799,"owners_count":37977263,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-08-22T15:14:58.755Z","status":"online","status_checked_at":"2026-10-03T02:00:07.567Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"},"owner_record":{"login":"jchristn","name":"Joel Christner","uuid":"1421081","kind":"user","description":"Distributed systems, AI, databases, networking, storage, cloud. BJJ black belt. Dad. Husband. List not ordered. I prefer to do all of my work out in the open","email":"joel.christner@gmail.com","website":"http://www.joelchristner.com","location":"California","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/1421081?u=ab14d54f383dc4e6a69380962b3084ae02587a55\u0026v=4","repositories_count":172,"last_synced_at":"2026-09-29T17:16:55.074Z","metadata":{"has_sponsors_listing":true,"funding":null},"html_url":"https://github.com/jchristn","funding_links":["https://github.com/sponsors/jchristn"],"total_stars":2345,"followers":288,"following":31,"created_at":"2022-11-06T20:24:11.326Z","updated_at":"2026-09-29T17:16:55.095Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jchristn","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jchristn/repositories"},"tags":[]},"repo_metadata_updated_at":"2026-10-04T00:25:35.856Z","dependent_packages_count":0,"downloads":8408,"downloads_period":"total","dependent_repos_count":0,"rankings":{"downloads":42.071135706590404,"dependent_repos_count":14.97801439290325,"dependent_packages_count":20.3376452392213,"stargazers_count":null,"forks_count":null,"docker_downloads_count":null,"average":25.795598446238316},"purl":"pkg:nuget/taskhandler","advisories":[],"docker_usage_url":"https://docker.ecosyste.ms/usage/nuget/taskhandler","docker_dependents_count":null,"docker_downloads_count":null,"usage_url":"https://repos.ecosyste.ms/usage/nuget/taskhandler","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/nuget/taskhandler/dependencies","status":null,"funding_links":["https://github.com/sponsors/jchristn"],"critical":null,"issue_metadata":{"last_synced_at":"2026-10-03T07:33:46.599Z","issues_count":0,"pull_requests_count":1,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":7.0,"issues_closed_count":0,"pull_requests_closed_count":1,"pull_request_authors_count":1,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":1,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":0,"past_year_pull_requests_count":1,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":7.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":1,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":1,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/jchristn%2Ftaskhandler/issues","maintainers":[{"login":"jchristn","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jchristn"}],"active_maintainers":[{"login":"jchristn","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jchristn"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/packages/taskhandler/codemeta","maintainers":[{"uuid":"jchristn","login":"jchristn","name":null,"email":null,"url":null,"packages_count":237,"html_url":"https://www.nuget.org/profiles/jchristn","role":null,"created_at":"2024-02-26T03:17:57.271Z","updated_at":"2024-02-26T03:17:57.271Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/nuget.org/maintainers/jchristn/packages"}]}