2014-11-15 39 views
0

我有.net 4.0应用程序执行重型数据库搜索。我希望这些操作是异步的,它也应该是可以取消的。 Async和await在.net 4.5中也可以正常工作,它也有Async db操作的executereaderasync方法。但我无法升级到.net 4.5。可以使用基于任务的编程,但不同步数据库搜索优先。有人可以建议在.net 4.0中实现这个选项.net 4.0使用c#4.0从数据库进行异步查询

回答

0

你可以咬紧牙关,使用Asynchronous Programming Model (APM),所有那些async学习资料都说成是过去的事情。自.NET 2.0以来,ADO.NET(至少SQL Server提供者)支持它。具体而言,您需要SqlCommand上的BeginExecute/EndExecuteCancel方法。

+0

我需要一种方法,我可以在.net 4.0中异步使用上述方法 –

+0

如果你的意思是你想用'async'关键字来使用它们,你可以使用上面的答案来获得关键字本身的支持。 NET 4.0,然后使用TaskFactory.FromAsync方法系列从BeginExecute/EndExecute方法对中获取一个可等待的Task。不过,你仍然必须取消旧的方式。 – cynic

+0

是的但我认为运行SQL查询不会以异步模式运行只有.Net代码将以异步模式运行。一旦转换到SQL Server,SQL Server将以同步模式运行它。这是我认为的 –

2

您可以使用异步定位包(Microsoft.Bcl.Async)来获取异步等待来处理.NET 4.0。这是msdn上的相关blog。 靶向包允许您使用伺机在Visual Studio 2012(以及更高版本)针对任何的以下平台(或更高版本)时:

  • 的.NET Framework 4.0(含KB2468871)
  • 的Silverlight 4
  • Windows Phone 7.5
  • 以及面向这些平台的可移植类库。

这种方式一旦你可以将你的应用程序移动到.NET 4.5,它也将是一个简单的过渡。

+0

我认为使用异步和等待不会完全满足,因为4.5有4.0 doea没有的executereaderasync方法。普通的executereader是同步的 –