Linux
Nginx
数据库
Python
PHP
C#
.NET
WPF
MAUI
Blazor
WinForm
帝国CMS
AKCMS
Typecho
织梦CMS
Visual Studio
Windows
Mac
Web前端
数据采集
运营
产品
摩托车
电影
杂事
访问数据库可能要花一些时间。这里不应该阻塞用户界面。ADO.NET 类 通过异步方法和同步方法提供了基于任务的异步编程。下面的代码片段类似于上一个使用 SqlDataReader 的代码,但它使用了异步的方法调用。连接用SqlConnection.OpenAsync 打开,读取器从
SqlCommand.ExecuteReaderAsync
方法中返回,记录使用SqIDataReader.ReadAsync 检索。在所有这些方法中,调用线程没有阻塞,但是可以在得到结果前,执行其他模作:
.
public static async Task Main()
await ReadAsync("Wrox Press");
public static async Task ReadAsync(int productId)
var connection = new SqlConnection(GetConnectionString());
string sql = "SELECT [Title], [Publisher],[ReleaseDate] " +
"FROM [ProCSharp].[Books] WHERE lower([Title]) " +
"Like @Title ORDER BY [ReleaseDate]";
var command = new SqlCommand(sql, connection);
var titleParameter = new SqlParameter("Title", SqldbType.NVarChar, 50);
titleParameter.Value = title;
command.Parameters.Add(titleParameter);
await connection.OpenAsync();
using (SqlDataReader reader =
await command.ExecuteReaderAsync(CommandBehavior.CloseConnection))
while (await reader.ReadAsync())
int id = reader.GetInt32(0);
string bookTitle = reader.GetString(1);
string publisher = reader[2].ToString();
DateTime? releaseDate =
reader.IsDBNull(3) ? (DateTime?)null : reader.GetDateTime(3);
Console.WriteLine($"{id,5}. {bookTitle,-40} {publisher,-15} " +
$"{releaseDate:d}");
使用异步方法调用,不仅有利于 Windows 应用程序,也有利于在服务器端同时进行多个调用。ADO.NET API 的异步方法有重载版本来支持 CancellationToken,使长时间运行的方法早些停止。
本文作者:Dotnet讲堂
信息来源:
公众号 Dotnet讲堂
所属分类:
C#
上一篇:
C#观察文件的更改
下一篇:
C#中的协变和逆变
Power by Typecho. Theme by Puma. Written by 董川民-
独立开发者
渝ICP备16006207号-2
渝公网安备 50011202503233号
友情链接: