C# 8 理解 await 使用语法
C# 8 understanding await using syntax
我有下一个方法:
public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
using var connection = new SqlConnection(_connectionString);
var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");
return allQuotes;
}
一切都很好,连接将在范围末尾处理。
但 resharper 建议将其更改为:
public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
await using var connection = new SqlConnection(_connectionString);
var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");
return allQuotes;
}
在使用前添加了await,代码编译成功。这是什么意思,我们什么时候需要这样做?
类似于using (...)
使用IDisposable
清理资源,await using (...)
使用IAsyncDisposable。
这允许在不阻塞的情况下执行耗时的清理任务(例如涉及 I/O)。
如果 SqlConnection
实现了 IAsyncDisposable
接口,Resharper 建议您切换到 await using
以使用 DisposeAsync
method
异步处理它
public interface IAsyncDisposable
{
ValueTask DisposeAsync();
}
我有下一个方法:
public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
using var connection = new SqlConnection(_connectionString);
var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");
return allQuotes;
}
一切都很好,连接将在范围末尾处理。
但 resharper 建议将其更改为:
public async Task<IEnumerable<Quote>> GetQuotesAsync()
{
await using var connection = new SqlConnection(_connectionString);
var allQuotes = await connection.QueryAsync<Quote>(@"SELECT [Symbol], [Bid], [Ask], [Digits] FROM [QuoteEngine].[RealtimeData]");
return allQuotes;
}
在使用前添加了await,代码编译成功。这是什么意思,我们什么时候需要这样做?
类似于using (...)
使用IDisposable
清理资源,await using (...)
使用IAsyncDisposable。
这允许在不阻塞的情况下执行耗时的清理任务(例如涉及 I/O)。
如果 SqlConnection
实现了 IAsyncDisposable
接口,Resharper 建议您切换到 await using
以使用 DisposeAsync
method
public interface IAsyncDisposable
{
ValueTask DisposeAsync();
}