简体   繁体   中英

Is it possible to reinstantiate a dbcontext when using a delayed task in .net core api

I have a controller where the functionality required is to implement a call where two actions are done simultaneously, first we get input and do a call to an external application then respond to the call OK we are working on it and release the caller. When the external application responds, we get the response and save to the db, I am using a task.delay as

Part 1

[HttpPost]
public async Task<IActionResults> ProcessTransaction(Transactions transactions)
{
     // do some processing
     TransactionResults results = new TransactionResults();
     Notify(transactions, results);
     
     return Ok("We are working on it, you will get a notification");
}

The delayed task

private void Notify(Transactions transactions, TransactionResults results)
{
    Task.Delay(10000).ContinueWith(t => SendNotification(transactions, results));
}

on the SendNotification I am attempting to save the results

private void SendNotification(Transactions transactions, TransactionResults results)
{
     // some processing
     _context.Add(results);    // this gives an error context has already been disposed
     _context.SaveChanges();
}

Is there a better way to do this, or a way to re instantiate the context?

I managed to do a work around to the problem I am facing, I created an endpoint that I would call once the notification results came back and the data would be saved on the callback not at that particular event. Once the controller has respond with an Ok, the controller is disposed and its difficult to re instantiate it. The call back work around works for now, I will update if I find another way to do it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM