如何创建新的异步任务可以将 CurrentUnitOfWork 保留在 aspboilerplate 中
How to create new Async Task can keep CurrentUnitOfWork in aspboilerplate
我有 API 带有这样的 unitofwork 标签
[HttpPost]
[Route("Book/ReadBookRequest")]
[UnitOfWork(scope: TransactionScopeOption.RequiresNew, isTransactional: true)]
然后我在 api 中开始新任务,如下所示:
var taskBusiness = Task.Factory.StartNew(async () =>
{
using (_abpSession.Use(tenantInfo.Id, _abpSession.UserId))
{
using (var uow = _unitOfWorkManager.Begin(new UnitOfWorkOptions { IsTransactional = false, Scope = System.Transactions.TransactionScopeOption.Required }))
{
CurrentUnitOfWork(1) //Current unit of work of uow
await InsertDatabase();
using (var uow2 = _unitOfWorkManager.Begin(new UnitOfWorkOptions { IsTransactional = false, Scope = System.Transactions.TransactionScopeOption.Required }))
{
//Save data to dabase
CurrentUnitOfWork(2) //Current unit of work of uow2
uow2.Complete()
}
CurrentUnitOfWork(1) //Now current unit of work of uow = null
}
}
});
请帮助我了解为什么我的 CurrentUnitOfWork(1) 在开始新的 uow 后为空。以及如何在我的情况下解决这个问题。
我的流程:
调用 api -> 已创建响应并且任务仍然 运行 将数据保存到数据库
谢谢!
将 StartNew 替换为 Task.Run(()=> blockcode) 它对 me.Thank 你 Stephen Cleary 有效。
我有 API 带有这样的 unitofwork 标签
[HttpPost]
[Route("Book/ReadBookRequest")]
[UnitOfWork(scope: TransactionScopeOption.RequiresNew, isTransactional: true)]
然后我在 api 中开始新任务,如下所示:
var taskBusiness = Task.Factory.StartNew(async () =>
{
using (_abpSession.Use(tenantInfo.Id, _abpSession.UserId))
{
using (var uow = _unitOfWorkManager.Begin(new UnitOfWorkOptions { IsTransactional = false, Scope = System.Transactions.TransactionScopeOption.Required }))
{
CurrentUnitOfWork(1) //Current unit of work of uow
await InsertDatabase();
using (var uow2 = _unitOfWorkManager.Begin(new UnitOfWorkOptions { IsTransactional = false, Scope = System.Transactions.TransactionScopeOption.Required }))
{
//Save data to dabase
CurrentUnitOfWork(2) //Current unit of work of uow2
uow2.Complete()
}
CurrentUnitOfWork(1) //Now current unit of work of uow = null
}
}
});
请帮助我了解为什么我的 CurrentUnitOfWork(1) 在开始新的 uow 后为空。以及如何在我的情况下解决这个问题。 我的流程: 调用 api -> 已创建响应并且任务仍然 运行 将数据保存到数据库 谢谢!
将 StartNew 替换为 Task.Run(()=> blockcode) 它对 me.Thank 你 Stephen Cleary 有效。