使用Linq2SQL和其他异步API

时间:2017-02-01 18:20:10

标签: c# asp.net asynchronous linq-to-sql

我正在开发一个使用Linq2SQL进行数据访问的应用程序,该应用程序即将开始使用(完全不相关的)async

在ASP.NET MVC控制器操作中的示例用法可能是这样的:

var db = DataContextManager.Context; // get a context instance which is cached on the 
                                     // request session.

var foo = db.Foos.Where(foo => foo.IsCool).First();

await unrelated.Stuff();

foo.IsCool = false;
db.SubmitChanges();

现在,我知道Linq2SQL通常不是线程安全的(widerange questions关于此问题,但是我已经知道了努力了解这是否会产生这种使用模式的问题。

有几点需要注意:

  • 每个请求都有一个不同的上下文实例。到目前为止,这并没有造成任何问题。
  • 还有一些用法,我们总是创建一个新的实例(创建方式与缓存的实例相同,每次只有新实例),而不是从请求上下文中获取可能缓存的数据库上下文。
  • 除了框架之外,没有任何实例可以并行执行DataContext - 相关的事情,。换句话说,我们完全按顺序完成所有操作(除了少数例外,我们在不触及Linq2SQL的情况下执行一些并行操作,然后在继续之前重新加入),但我们(当然)允许例如ASP.NET要并行处理多个请求。

如果这种用法存在问题,我们应该期待看到哪些问题?我们可以使用哪些良好的经验法则来避免它们,或者我们是否需要完全隔离所有异步内容并且仅将同步方法与Linq2SQL结合使用?并且,也许最重要的是,我们应该采取什么样的测试来重现我们可能期望看到的问题类型?

0 个答案:

没有答案