访问数据库可能要花一些时间。这里不应该阻塞用户界面。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 Cancellation