您现在的位置是:首页 > 编程 > 

使用 .ET Core 中的“即发即弃”提高应用程序性能

2025-07-27 06:55:22
使用 .ET Core 中的“即发即弃”提高应用程序性能 我来帮您翻译这篇关于Task.Run()的深入研究文章。深入理解Task.Run() 通过适当使用"即发即弃"(fire-and-forget)方法,你可以提高.ET Core应用程序的响应性和性能,同时确保重要的后台任务能够高效执行。在本教程中,我们将专注于并学习如何使用Task.Run来执行后台工作。什么是Tas

使用 .ET Core 中的“即发即弃”提高应用程序性能

我来帮您翻译这篇关于Task.Run()的深入研究文章。

深入理解Task.Run() 通过适当使用"即发即弃"(fire-and-forget)方法,你可以提高.ET Core应用程序的响应性和性能,同时确保重要的后台任务能够高效执行。

在本教程中,我们将专注于并学习如何使用Task.Run来执行后台工作。

什么是Task.Run? Task.Run将指定的工作队列化以在线程池上运行,并返回一个代表该工作的Task对象。这允许工作异步执行而不阻塞主线程。

Task.Run如何工作:控制流程图

  1. 任务创建:Task.Run方法创建一个新的Task对象
  2. 工作排队:任务被排入线程池队列
  3. 线程池执行:线程池线程获取任务并执行它
  4. 任务完成:任务完成,Task对象被标记为已完成、出错或取消,取决于执行结果
代码语言:javascript代码运行次数:0运行复制
主线程                     线程池
    |                        |
    |                        |
    | Task.Run               |
    |--------> Task Created  |
    |                        |
    |                        |
    |                        | 
    |                        | Task Queued
    |                        |-------------> Task Executed
    |                        |                   |
    |                        |                   |
    | Task Continuation      |                   | Task Completed
    |<---------------------- |<------------------|
    |                        |

.ET Core中的Task.Run允许你将工作卸载到后台线程,这可以通过释放主线程来处理其他任务,从而提高应用程序的响应性。

以下是一些可以使用Task.Run的实际用例:

实际示例

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

假设在成功的数据库操作后,我们想要记录操作结果。如果我们按顺序执行,UI将保持阻塞,而从UI用户或客户端的角度来看,这并不是重要的工作。因此,如果我们在后台执行日志记录,这将提高响应时间。

详细实现:

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

代码语言:javascript代码运行次数:0运行复制
public interfaceILoggingService
{
    voidLogInformation(string message);
}

publicclassLoggingService:ILoggingService
{
    publicvoidLogInformation(string message)
    {
        Task.Run(()=>
        {
            // Simulate logging operation
            System.IO.File.AppendAllText("",$"{DateTime.Utcow}: {message}{}");
        });
    }
}

控制器:

代码语言:javascript代码运行次数:0运行复制
[ApiController]
[Route("[controller]")]
publicclassExampleController:ControllerBase
{
    privatereadonlyILoggingService _loggingService;

    publicExampleController(ILoggingService loggingService)
    {
        _loggingService = loggingService;
    }

    [HttpGet]
    publicIActionResultGet()
    {
         // Reading Work to DB

        ///

        _loggingService.LogInformation("Get method called.");
        returnOk("Hello, world!");
    }
}
  1. 生成报告 假设用户想要提交请求以从数据库生成报告,我们可以提交报告生成请求,然后所有处理都在后台进行,而不是让用户一直等待。
代码语言:javascript代码运行次数:0运行复制
public void GenerateReport(int reportId)
{
    Task.Run(() => 
    {
        ReportService.Generate(reportId);
    });
}
  1. 上传文件 假设用户想要从UI端上传文件,我们希望处理在后台继续进行,用户可以尽快继续进行其他操作。
代码语言:javascript代码运行次数:0运行复制
public void UploadFile(string filePath)
{
    Task.Run(() => 
    {
        FileService.Upload(filePath);
    });
}
  1. 缓存清理 异步清理缓存以释放内存或刷新数据,而不阻塞主线程。
代码语言:javascript代码运行次数:0运行复制
public void ClearCache()
{
    Task.Run(() => 
    {
        CacheService.Clear();
    });
}
  1. 数据库清理 在成功下订单后,我们需要从多个库存表中删除记录,这些操作我们可以在后台进行,这样用户就能尽快得到响应并开始另一项活动。
代码语言:javascript代码运行次数:0运行复制
public void CleanupDatabase()
{
    Task.Run(() => 
    {
        DatabaseService.CleanupOldRecords();
    });
}
  1. 刷新API令牌 在后台刷新API令牌,确保它们是最新的,而不会中断正在进行的操作。
代码语言:javascript代码运行次数:0运行复制
public void RefreshApiToken()
{
    Task.Run(() => 
    {
        TokenService.Refresh();
    });
}
  1. 发送 a. 这是一个完美的用例,假设用户订购了一件商品,在成功下单后,我们需要在后台向最终用户发送,这样用户就能尽快得到响应。 b. 另一个用例是在用户注册后,我们可以在后台发送,这样UI就能尽快得到响应。
代码语言:javascript代码运行次数:0运行复制
public classRegistrationService
{
    privatereadonlyEmailService _emailService;

    publicRegistrationService(EmailService emailService)
    {
        _emailService = emailService;
    }

    publicvoidRegisterUser(User user)
    {
       // logic for registration or DB call

        // Send confirmation email in background
        Task.Run(()=>
        {
            _emailService.Send(user.Email,"Welcome!","Thank you for registering.");
        });
    }
}

有效使用Task.Run可以通过将CPU密集型任务卸载到后台线程并允许主线程处理其他操作,从而大大提高.ET Core应用程序的性能和响应性。

本文参与 腾讯云自媒体同步曝光计划,分享自。原始发表:2025-01-08,如有侵权请联系 cloudcommunity@tencent 删除线程性能core工作后台

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1188185.html

相关标签:无
上传时间: 2025-07-22 15:40:42
留言与评论(共有 18 条评论)
本站网友 xiao77论坛文学欣赏
23分钟前 发表
代码语言:javascript代码运行次数:0运行复制public void CleanupDatabase() { Task.Run(() => { DatabaseService.CleanupOldRecords(); }); } 刷新API令牌 在后台刷新API令牌
本站网友 基础代谢率计算公式
21分钟前 发表
以下是一些可以使用Task.Run的实际用例:实际示例日志记录 这是一个完美的用例
本站网友 去皱的方法
23分钟前 发表
假设在成功的数据库操作后
本站网友 apu是什么
18分钟前 发表
出错或取消
本站网友 专利办理
16分钟前 发表
world!"); } } 生成报告 假设用户想要提交请求以从数据库生成报告
本站网友 沈阳四中
8分钟前 发表
假设用户订购了一件商品
本站网友 汇成和苑
27分钟前 发表
代码语言:javascript代码运行次数:0运行复制public void RefreshApiToken() { Task.Run(() => { TokenService.Refresh(); }); } 发送 a. 这是一个完美的用例
本站网友 白骨精见了孙悟空
23分钟前 发表
因此
本站网友 海外华人数量
24分钟前 发表
分享自
本站网友 梁翘柏
30分钟前 发表
这样UI就能尽快得到响应
本站网友 南京个人出租房
16分钟前 发表
我们需要从多个库存表中删除记录
本站网友 漏洞扫描工具
16分钟前 发表
这样UI就能尽快得到响应
本站网友 阿拉坦五味丸
23分钟前 发表
如果我们按顺序执行
本站网友 东风广场女尸案
12分钟前 发表
本文参与 腾讯云自媒体同步曝光计划
本站网友 朱弘
28分钟前 发表
详细实现:日志服务:我们在以下代码中使用Task.Run进行日志记录代码语言:javascript代码运行次数:0运行复制public interfaceILoggingService { voidLogInformation(string message); } publicclassLoggingService
本站网友 白天鹅大酒店
29分钟前 发表
代码语言:javascript代码运行次数:0运行复制public void GenerateReport(int reportId) { Task.Run(() => { ReportService.Generate(reportId); }); } 上传文件 假设用户想要从UI端上传文件
本站网友 香港汇丰银行客服电话
10分钟前 发表
UI将保持阻塞