我有一个较旧的应用程序,该应用程序是使用Microsoft.Practices.EnterpriseLibrary.Data
从数据库获取数据的地方编写的。我最近已升级到.NET 4.5,并想利用 await/async 的优势。
我没有看到按照命名标准以“Async”结尾的任何方法,即使在该软件包的最新版本中也是如此。是否可以将此ADO .NET库与await/async一起使用,而无需手动使其异步?
最佳答案
我使用的是EL的较旧版本,该版本提供Begin */End *方法,但不提供异步版本。一些简单的扩展方法可以简化生活:
public static async Task<IDataReader> ExecuteReaderAsync(this SqlDatabase database, DbCommand command)
{
return await Task<IDataReader>.Factory.FromAsync(database.BeginExecuteReader, database.EndExecuteReader, command, null);
}
public static async Task<object> ExecuteScalarAsync(this SqlDatabase database, DbCommand command)
{
return await Task<object>.Factory.FromAsync(database.BeginExecuteScalar, database.EndExecuteScalar, command, null);
}
public static async Task<XmlReader> ExecuteXmlReaderAsync(this SqlDatabase database, DbCommand command)
{
return await Task<XmlReader>.Factory.FromAsync(database.BeginExecuteXmlReader, database.EndExecuteXmlReader, command, null);
}
public static async Task<int> ExecuteNonQueryAsync(this SqlDatabase database, DbCommand command)
{
return await Task<int>.Factory.FromAsync(database.BeginExecuteNonQuery, database.EndExecuteNonQuery, command, null);
}
关于c# - 等待/异步Microsoft Practices企业库数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23023579/