Skip to content

When using ThreadPool.QueueUserWorkItem with a method that throws an exception, the entire application crashes and exits unexpectedly. This behavior is not documented and can lead to unintended application terminations. #11084

Open
@1257960069

Description

@1257960069

Type of issue

Typo

Description

[在此处输入反馈]

using Microsoft.AspNetCore.Mvc;

namespace WebApplic.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private static readonly string[] Summaries = new[]
        {
            "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
        };

        private readonly ILogger<WeatherForecastController> _logger;

        public WeatherForecastController(ILogger<WeatherForecastController> logger)
        {
            _logger = logger;
        }

        [HttpGet(Name = "GetWeatherForecast")]
        public IEnumerable<WeatherForecast> Get()
        {
            ThreadPool.QueueUserWorkItem(_ =>
            {
                throw new Exception("An error occurred.");
            });
            return Enumerable.Range(1, 5).Select(index => new WeatherForecast
            {
                Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                TemperatureC = Random.Shared.Next(-20, 55),
                Summary = Summaries[Random.Shared.Next(Summaries.Length)]
            })
            .ToArray();
        }
    }
}

Expected behavior
The exception should be caught and handled appropriately, or at the very least, the documentation should clearly state that unhandled exceptions in ThreadPool.QueueUserWorkItem will cause the application to crash.

Screenshots
N/A

Additional context
This issue can lead to unexpected application crashes and loss of data. It is important to either handle the exception within the QueueUserWorkItem method or ensure that the documentation clearly states this behavior to prevent such issues.

Environment:

  • OS: [e.g., Windows 11]
  • .NET version: [e.g., .NET 8.0]
  • IDE: [e.g., Visual Studio 2022]

Please update the documentation to reflect this behavior or provide a solution to handle exceptions in ThreadPool.QueueUserWorkItem without crashing the application.

Thank you.

Page URL

https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.threadpool.queueuserworkitem?view=net-8.0&devlangs=csharp&f1url=%3FappId%3DDev17IDEF1%26l%3DZH-CN%26k%3Dk(System.Threading.ThreadPool.QueueUserWorkItem)%3Bk(TargetFrameworkMoniker-.NETFramework%2CVersion%253Dv4.7.2)%3Bk(DevLang-csharp)%26rd%3Dtrue

Content source URL

https://github.com/dotnet/dotnet-api-docs/blob/main/xml/System.Threading/ThreadPool.xml

Document Version Independent Id

e13ed79b-e212-1d7a-f939-6086b300a399

Platform Id

aa4d1ae9-7ae8-c1d8-6d31-f91535257631

Article author

@dotnet-bot

Activity

added
needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
on Mar 13, 2025
1257960069

1257960069 commented on Mar 13, 2025

@1257960069
Author
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp5
{
    internal class Program
    {
        static void Main(string[] args)
        {
            ThreadPool.QueueUserWorkItem(state =>
            {
                throw new Exception("An error occurred.");
            });
            Console.WriteLine("Hello, World!");
            Console.ReadLine();
        }
    }
}

Maybe should recommand developer use Task.Run

added and removed
needs-area-labelAn area label is needed to ensure this gets routed to the appropriate area owners
on Mar 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @gewarren@1257960069

        Issue actions

          When using `ThreadPool.QueueUserWorkItem` with a method that throws an exception, the entire application crashes and exits unexpectedly. This behavior is not documented and can lead to unintended application terminations. · Issue #11084 · dotnet/dotnet-api-docs