【问题标题】:Asynchronous query from database using c# 4.0使用 c# 4.0 从数据库进行异步查询
【发布时间】:2014-11-15 22:10:25
【问题描述】:

我有 .net 4.0 应用程序进行大量的数据库搜索。我希望这些操作是异步的,并且它应该是可取消的。 Async 和 await 在 .net 4.5 中工作正常,它还具有用于异步数据库操作的 executereaderasync 方法。但我无法升级到 .net 4.5。可以使用基于任务的编程,但优先考虑异步数据库搜索。有人可以建议在 .net 4.0 中实现这一目标的可能选项

【问题讨论】:

    标签: .net c#-4.0 asynchronous


    【解决方案1】:

    您可以使用异步目标包 (Microsoft.Bcl.Async) 让 async-await 在 .NET 4.0 上工作。这是 msdn 上的相关 blog。 定位包允许您在针对以下任何平台(或更高版本)时在 Visual Studio 2012(和更高版本)中使用 await:

    • .NET Framework 4.0(带有 KB2468871)
    • 银光4
    • Windows Phone 7.5
    • 以及针对这些平台的可移植类库。

    这样,一旦您可以将应用程序迁移到 .NET 4.5,它也将是一个简单的过渡。

    【讨论】:

    • 我认为使用 async 和 await 还不够,因为 4.5 有 executereaderasync 方法,而 4.0 没有。正常的executereader是同步的
    【解决方案2】:

    您可以咬紧牙关,使用所有 async 学习材料所说的已成为过去的 Asynchronous Programming Model (APM)。 ADO.NET(至少是 SQL Server 提供程序)从 .NET 2.0 开始就支持它。具体来说,您需要 SqlCommand 上的 BeginExecute/EndExecuteCancel 方法。

    【讨论】:

    • 我需要一种可以在 .net 4.0 中异步使用上述方法的方法
    • 如果你的意思是你想将它们与async关键字一起使用,你可以使用上面的答案在.NET 4.0中获得对关键字本身的支持,然后使用TaskFactory.FromAsync方法家庭从 BeginExecute/EndExecute 方法对中获取等待的任务。不过,您仍然必须取消旧方式。
    • 是的,但我认为运行 SQL 查询不会在异步模式下运行,只有 .Net 代码会在异步模式下运行。一旦转换到 SQL Server,SQL Server 将以同步模式运行它。这是我的想法
    • .NET 4.5 方法中的“合法”async 方法在后台使用FromAsync - 您可以查看reference source。因此异步调用的实现是一样的。
    猜你喜欢
    • 2011-09-29
    • 1970-01-01
    • 2018-01-19
    • 2017-12-17
    • 2016-08-12
    • 2022-01-17
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多