我正在查看一些代码并与同事讨论.
特别是一段看起来像这样的代码.
[Test]
public void TestNormalWay()
{
using(var cn = GetConnection())
{
cn.Open();
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
问题出现了:
"为什么不将cn.Open移动到GetConnection方法中."
我说如果"打开"抛出一个异常处理就不会被调用.他的回答是
"那么什么.连接没有打开,为什么需要关闭(或处理)?"
对我来说,这只是一个不想知道我是否需要处理/关闭的问题所以我会重复cn.Open代码而不是将其移动到共享函数中.
但它很有趣......所以我在SQL Server连接池(ADO.NET)上做了一些阅读
对我来说,目前尚不清楚是否存在调用cn.Open并抛出异常需要调用dispose的场景.
所以在下面的例子中,"TestNormalWay"和"WhyNotDoItThisWay"之间是否存在任何差异
protected static DbConnection GetConnection()
{
DbConnection cn = new SqlConnection("SomeConnecitonstring... ");
return cn;
}
protected static DbConnection GetConnectionDangerousVersion()
{
DbConnection cn = new SqlConnection("SomeConnecitonstring... ");
cn.Open(); // this will throw.. .dispose not called
return cn;
}
[Test]
public void TestNormalWay()
{
using(var cn = GetConnection())
{
cn.Open();
// do stuff …Run Code Online (Sandbox Code Playgroud) 想象一下易腐烂商品的销售引擎。每件物品都有一个有效期。搜索索引将对所有待售商品建立索引,但对可购买数量以及所有商品何时过期非常感兴趣。
为了跟上搜索系统中的过期日期,我可以:
定期轮询数据存储,并向系统询问自上次查看以来已过期的项目,并向搜索系统生成更新事件。搜索系统可以向数据存储询问当前可用的项目计数并适当地更新索引。
以某种方式在将商品添加到销售集合时安排到期事件,并让处理器简单地处理事件队列。
有想法吗?我喜欢安排未来事件的想法,但我不知道有什么技术可以帮助我将事件的交付延迟到特定时间。也许 MS Service Bus 可以使用 LockedUntilUtc 来做到这一点?人们一定会使用一种模式来处理此类内容,但我只是不知道要搜索什么。