访问数据库可能要花一些时间。这里不应该阻塞用户界面。ADO.NET类通过异步方法和同步方法提供了基于任务的异步编程。下面的代码片段类似于上一个使用SqlDataReader的代码,但它使用了异步的方法调用。连接用SqlConnection.OpenAsync打开,读取器从SqlCommand.ExecuteReaderAsync方法中返回,记录使用SqlDataReader.ReadAsync检索。在所有这些方法中,调用线程没有阻塞,但是可以在得到结果前,执行其他操作:
public static async Task ReadAsync(string title)
{
var connection = new SqlConnection(GetConnectionString());
string sql = "SELECT [Id],[Title],[Publisher],[Isbn],[ReleaseDate] "+
"FROM [ProCSharp].[Books] WHERE lower([Title]) LIKE @Title ORDER BY [ReleaseDate]";
var command = new SqlCommand(sql,connection);
command.Parameters.Add("@Title",SqlDbType.NVarChar,50);
command.Parameters["@Title"].Value = title;
await connection.OpenAsync();
//使用异步任务取消
//var source = new CancellationTokenSource();
//source.CancelAfter(1000);
//await connection.OpenAsync(source.Token);

本文探讨了如何使用ADO.NET的异步方法进行数据库访问,以避免阻塞用户界面。通过示例展示了如何使用SqlConnection.OpenAsync、SqlCommand.ExecuteReaderAsync及SqlDataReader.ReadAsync实现异步操作,同时指出异步方法在Windows应用和服务器端并发调用的优势,并提到了CancellationToken在取消长时间运行操作中的应用。
最低0.47元/天 解锁文章
1392

被折叠的 条评论
为什么被折叠?



