我在asp.net应用程序的线程中使用数据库时遇到问题.
当我想启动我的应用程序时,我想用它启动一个名为“ BackgroundWorker”的线程,该线程在后台运行,直到整个应用程序停止.
问题是我在线程中的dbContext有很多问题.
II尝试通过“ ConfigureServices”或“ Configure”方法在Startup.cs中启动walker,然后像这样的“ dbContext = new ApplicationContext()”在Walker的构造函数中初始化dbContext,它告诉我连接不是配置,当我尝试在数据库的while(true)队列中进行操作时.
如果我为Walker编写了一个自己的控制器,该控制器在他的构造函数中接收到ApplicationContext,然后启动了这样的线程,如果我使用GET Request调用了该控制器一次:
public BackgroundWorker(ChronicusContext dbContext)
{
_dbContext = dbContext;
_messageService = new MailMessageService();
}
// GET: api/backgroundworker
[HttpGet]
[Route("start")]
public void StartWorker()
{
//Thread thread = new Thread(this.DoBackGroundWork);
Thread thread = new Thread(() => DoBackGroundWork(this._dbContext));
thread.Start();
}
public void DoBackGroundWork(ChronicusContext _dbContext)
{
while (true)
{
if (_dbContext.PollModels.Any()) //Here is the exception
{
...
}
}
}
然后,我收到一个System.ObjectDisposedException,该对象已经放置在while(true)队列中.
我以许多不同的方式尝试了这些和类似的东西,但是始终会收到像这两个这样的异常,或者数据库连接已关闭.
有人可以帮助我并告诉我这是如何工作的吗?
谢谢!