如果SQLDpendency onchange事件的线程太忙,则不会触发它是正常的行为吗?
private void NotificationOnChanged(...)
{
// get database results
// simulate long process
Thread.Sleep(10000);
}
在睡眠期间,我添加了一个新行,睡眠过期后通知会丢失。
我是否必须生成一个新的单个线程来完成工作并使用一个标志来检测是否有新的通知到达以重新启动它?
答案 0 :(得分:3)
此行为是ADO.net通知侦听器上实现的工件。见http://rusanu.com/2008/01/04/sqldependencyonchange-callback-timing/。
发布WAITFOR(RECEIVE)的SqlDependency内部线程在回调返回之前不会发布另一个。因此,您必须尽可能少地处理并返回OnChange事件。定义没什么阻塞。
或者,您可以使用较低级别的SqlNotificationRequest来管理所有内容,包括通知处理。但是您必须管理所有内容。见http://technet.microsoft.com/en-us/library/ms190270(v=sql.105).aspx