我正在使用 .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.StartNew
或 TaskFactory.StartNew
不能接受异步委托(delegate)( Func<Task>
),所以你应该使用 Task.Run
相反,它确实有一个 overload with Func < Task > .您必须使用 await await
或 Unwrap
反对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/