我正在开发 .NET 6 Web API,并使用 Task.Run() 处理 CPU 密集型任务,将其卸载到后台线程。但是,我的控制器操作似乎仍然被阻止,并且请求没有按预期立即返回。
代码示例:
[HttpGet("process-data")]
public IActionResult ProcessData()
{
Task.Run(() => LongRunningTask());
return Ok("Processing started...");
}
private void LongRunningTask()
{
// Simulating a long CPU-bound task
Thread.Sleep(5000);
// Further processing...
}
我的问题是:
我使用 Task.Run() 将 CPU 密集型工作卸载到后台线程,但控制器操作仍然会阻塞,直到任务完成。我希望在长时间运行的任务在后台执行时立即返回响应“处理开始...”。相反,请求似乎被阻止,直到 LongRunningTask() 完成。
适合您任务的正确选项是后台服务。如果您想运行基于队列的后台服务,您可以看到这个链接,如@MindSwipe所说。