multithreading - 在.Net Core的后台插入批量数据

标签 multithreading asp.net-core asp.net-core-mvc asp.net-core-webapi background-service

我正在使用 .Net Core 3.1 并且我想在后台插入批量数据,所以我不需要我的 http 请求等待它“就像一劳永逸”

所以我尝试了以下代码

public object myFunction(){
    Task.Factor.StartNew(() => {
        _context.BulkInsertAsync(logs);
    });

    return data;
}

但是什么也没发生,没有数据保存在数据库中
是在我的数据返回后,我的 _context 和日志将为空,所以该过程被归档?
或者还有其他方法可以插入我的数据并且不要等待它

注意:如果我用发送邮件或任何其他东西替换插入语句,后台任务就会工作

已解决 :

谢谢@Peter,我用它解决了
Task.Run(async () => await _context.BulkInsertAsync(logs));

最佳答案

Task.Factory.StartNewTaskFactory.StartNew不能接受异步委托(delegate)( Func<Task> ),所以你应该使用 Task.Run相反,它确实有一个 overload with Func < Task > .您必须使用 await awaitUnwrap反对StartNew获得与 Run 相同的行为.请阅读Stephen Toub's excellent blog post .

public object myFunction(){
    Task.Run(async () => await _context.BulkInsertAsync(logs));
    return data;
}

关于multithreading - 在.Net Core的后台插入批量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62415061/

相关文章:

.net - 应用程序洞察 : loggerFactory. AddApplicationInsights 在 .net core 2.2.0 中已弃用

asp.net-core - "netcoreapp1.0"是不受支持的框架。 - Asp.Net 核心音乐商店

java - 动态线程池

java线程: producer - consumer

java - 如何在线程和 GUI 之间进行通信

asp.net-core - 在执行 DI 时为服务指定选项的简洁方法

asp.net - Serilog 接收器 : Reading from json configuration not working

asp.net-core-mvc - Asp.Net Core RC2 上传超时

cookies - 如何更改 OpenID Connect 中间件(随机数和相关性)cookie 的默认名称

C# 套接字异步与多线程