在 .Net Core 的后台插入批量数据
Insert bulk data in background in .Net Core
我正在使用 .Net Core 3.1,我想在后台插入批量数据,所以我不需要等待它的 http 请求 "like fire and forget"
所以我尝试了下面的代码
public object myFunction(){
Task.Factor.StartNew(() => {
_context.BulkInsertAsync(logs);
});
return data;
}
但是没有任何反应,数据库中没有保存数据
在我的数据返回后我的 _context 和日志将为空,所以流程被归档?
或者有任何其他方法可以插入我的数据并且不要等待它
注意:如果我用发送邮件或任何其他东西替换插入语句,后台任务工作
已解决:
谢谢@Peter,我使用
解决了它
Task.Run(async () => await _context.BulkInsertAsync(logs));
这就是我实现它的方式。这假设响应并不重要。
public NotImportantResult ProcessBulkData()
{
myFunctionAsync();
return new NotImportantResult()
}
private static async void myFunctionAsync()
{
await Task.Factory.StartNew(() => new MyBulkProccessor.BulkInsertAsync(logs));
}
Task.Factory.StartNew
或 TaskFactory.StartNew
不能接受异步委托 (Func<Task>
),所以你应该使用 Task.Run
而不是它确实有一个 overload with Func < Task >. You would have to use await await
or Unwrap
against StartNew
to get the same behaviour as with Run
. Please read Stephen Toub's excellent blog post.
public object myFunction(){
Task.Run(async () => await _context.BulkInsertAsync(logs));
return data;
}
我正在使用 .Net Core 3.1,我想在后台插入批量数据,所以我不需要等待它的 http 请求 "like fire and forget"
所以我尝试了下面的代码
public object myFunction(){
Task.Factor.StartNew(() => {
_context.BulkInsertAsync(logs);
});
return data;
}
但是没有任何反应,数据库中没有保存数据 在我的数据返回后我的 _context 和日志将为空,所以流程被归档? 或者有任何其他方法可以插入我的数据并且不要等待它
注意:如果我用发送邮件或任何其他东西替换插入语句,后台任务工作
已解决:
谢谢@Peter,我使用
解决了它Task.Run(async () => await _context.BulkInsertAsync(logs));
这就是我实现它的方式。这假设响应并不重要。
public NotImportantResult ProcessBulkData()
{
myFunctionAsync();
return new NotImportantResult()
}
private static async void myFunctionAsync()
{
await Task.Factory.StartNew(() => new MyBulkProccessor.BulkInsertAsync(logs));
}
Task.Factory.StartNew
或 TaskFactory.StartNew
不能接受异步委托 (Func<Task>
),所以你应该使用 Task.Run
而不是它确实有一个 overload with Func < Task >. You would have to use await await
or Unwrap
against StartNew
to get the same behaviour as with Run
. Please read Stephen Toub's excellent blog post.
public object myFunction(){
Task.Run(async () => await _context.BulkInsertAsync(logs));
return data;
}