c# html 获取数据库连接,c#-ASP.NET Web Api,线程中的数据库连接

在ASP.NET应用程序中使用BackgroundWorker线程进行数据库操作时遇到问题。尝试在Startup.cs中初始化dbContext并在后台线程中使用,但遇到了连接未配置或对象已释放的异常。解决方案指出,对于Web应用,多线程通常不是最佳实践,建议使用异步查询以避免阻塞主线程。考虑使用异步数据库调用并在响应客户端请求时处理数据,以提高用户体验。
摘要由CSDN通过智能技术生成

我在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)队列中.

我以许多不同的方式尝试了这些和类似的东西,但是始终会收到像这两个这样的异常,或者数据库连接已关闭.

有人可以帮助我并告诉我这是如何工作的吗?

谢谢!

解决方法:

通常,用于Web应用程序的服务器端多线程并不经常发生,并且在大多数情况下是很大的不.

从概念上讲,您的服务器是“多线程”的,它处理来自客户端/用户/其他服务器的许多HTTP请求.对于移动和Web架构/设计,您的服务器处理多个请求,并且您的客户端正在处理异步调用,并等待诸如API方法StartWorker之类的长时间运行的调用的响应.

考虑这种情况,您向客户端的WebAPI方法StartWorker发出请求,使请求正在等待响应,将工作放在另一个线程上则无济于事,因为客户端仍在等待响应.

例如,让我们考虑您的客户端一个带有Ajax调用的HTML网页.您通过Ajax调用StartWorker,将把数据加载到HTML表中.从UX的角度来看,您将希望在长时间运行的StartWorker响应您的HTML Page Ajax调用请求时,放置一个进度条.当StartWorker响应时,Ajax调用将使用StartWorker响应加载HTML表. StartWorker必须响应数据.如果StartWorker事先作出响应,则您将必须通过SignalR发送推送通知,例如,当另一个线程完成并获得HTML表所需的数据时.

从Ajax请求/响应的角度来看,希望可以看到对WebAPI方法的调用花费的时间相同,因此在这种情况下(最常见的Web应用程序情况),多线程变得毫无意义.

您可以让您的客户端UI加载其他UI元素,并在HTML表UI区域中显示进度条,直到您的数据库调用完成并用数据响应您的Ajax调用为止.这样,您的用户就知道事情正在发生并且仍然在加载.

如果您仍然需要API中的其他线程来满足项目需求,那么我认为您必须使用Entity Framework 6或更高版本来支持异步查询,请参见本教程:

更新

现在,我知道您需要重复运行一次SQL查询,并且您有一个Azure Web App,如果要使用Sql Azure,则要使用的是Azure Automation,如果要使用Sql Server,则要使用的是Sql Server Job实例作为您的后端

标签:multithreading,asp-net,c,asp-net-mvc

来源: https://codeday.me/bug/20191027/1944669.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值