by Guest » 06 Sep 2025, 15:58
Ich erstelle eine ASP.NET -Kern -Web -API, die auf Kestrel gehostet wird. Eingehende HTTP -Anforderungen werden an den Threadpool gesendet, der einen verfügbaren Thread auswählt, um meine Controller -Aktion auszuführen. In dieser Aktion lade ich einen CPU-gebundenen oder blockierenden Operation in Task.run (...) ab, damit der ursprüngliche Anforderungs-Thread schneller zum Pool zurückkehren kann. < /P>
Code: Select all
[ApiController]
[Route("[controller]")]
public class WorkController : ControllerBase
{
[HttpGet]
public async Task Get()
{
// Simulate heavy CPU-bound work
await Task.Run(() => HeavyWork());
return Ok("Done");
}
private void HeavyWork()
{
// e.g. complex calculations, image processing, etc.
Thread.Sleep(500);
}
}
Zehn HTTP -Anforderungen kommen gleichzeitig ein.
verfügt jetzt über zehn kostenlose Threads, die zehn neue HTTP -Anforderungen ohne Verzögerung abholen können. Es fühlt sich an wie Threads, die von Aufgabe befreit wurden.>
Ich erstelle eine ASP.NET -Kern -Web -API, die auf Kestrel gehostet wird. Eingehende HTTP -Anforderungen werden an den Threadpool gesendet, der einen verfügbaren Thread auswählt, um meine Controller -Aktion auszuführen. In dieser Aktion lade ich einen CPU-gebundenen oder blockierenden Operation in Task.run (...) ab, damit der ursprüngliche Anforderungs-Thread schneller zum Pool zurückkehren kann. < /P>
[code][ApiController]
[Route("[controller]")]
public class WorkController : ControllerBase
{
[HttpGet]
public async Task Get()
{
// Simulate heavy CPU-bound work
await Task.Run(() => HeavyWork());
return Ok("Done");
}
private void HeavyWork()
{
// e.g. complex calculations, image processing, etc.
Thread.Sleep(500);
}
}
[/code]
Zehn HTTP -Anforderungen kommen gleichzeitig ein.[code]ThreadPool[/code] verfügt jetzt über zehn kostenlose Threads, die zehn neue HTTP -Anforderungen ohne Verzögerung abholen können. Es fühlt sich an wie Threads, die von Aufgabe befreit wurden.>