使用 .NET Core 中的“发射后不管”功能提高应用程序性能

发射后不管,只不过是在后台执行任务

**深入探究 Task.Run()**

通过适当使用发射后不管方法,您可以提高 .NET Core 应用程序的响应能力和性能,同时确保高效执行重要的后台任务。

在本教程中,我们将重点介绍 Task.Run,​​并学习如何使用 Task.Run 执行后台工作

**什么是 Task.Run?**

Task.Run 将指定的工作排队在线程池上运行,并返回表示该工作的 Task 对象。这样可以异步执行工作而不会阻塞主线程。

**Task.Run 的工作原理:控制流程图**

**任务创建**:Task.Run 方法创建一个新的 Task 对象。

排队工作:将任务排队到线程池。

线程池执行:线程池线程选取任务并执行它。

任务完成:任务完成,并且根据结果将任务对象标记为完成、故障或取消。

Image description

.NET Core 中的 Task.Run 允许你将工作转移到后台线程,从而释放主线程以执行其他任务,从而帮助提高应用程序的响应能力

下面是一些我们可以使用 Task.Run 的实时用例

**实时示例**

**记录**

这是一个完美的用例,每个应用程序都在进行日志记录,让我们了解如何提高性能

假设在数据库操作成功后,我们想要记录操作结果,如果我们按顺序执行,则 UI 将保持阻塞,当然这对于 UI 用户或客户端来说不是重要的工作,因此如果我们在后台执行日志记录,则会增加响应时间。

详细实现

记录器服务:我们正在使用以下代码中的 Task.Run 进行记录

public interface ILoggingService
{
    void LogInformation(string message);
}

public class LoggingService : ILoggingService
{
    public void LogInformation(string message)
    {
        Task.Run(() => 
        {
            // Simulate logging operation
            System.IO.File.AppendAllText("log.txt", $"{DateTime.UtcNow}: {message}{Environment.NewLine}");
        });
    }
}

**控制器**

[ApiController]
[Route("[controller]")]
public class ExampleController : ControllerBase
{
    private readonly ILoggingService _loggingService;

    public ExampleController(ILoggingService loggingService)
    {
        _loggingService = loggingService;
    }

    [HttpGet]
    public IActionResult Get()
    {  
         // Reading Work to DB

        ///

        _loggingService.LogInformation("Get method called.");
        return Ok("Hello, world!");
    }
}

**2. 生成报告**

请点击此处查看完整教程