2014-11-15 59 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是同步的 –