[英]C# Async method returning a task outside of using statement
我有一個關於異步方法,返回和使用我找不到答案的語句的問題。
具有以下兩個代碼塊。 兩者的行為方式是否相同? 使用選項1是否有任何風險?
選項1:
public async Task<IEnumerable<Devices>> GetPreviousDevicesAsync(string token)
{
IEnumerable<Devices> devices;
using (var connection = _dbConnectionFactory.CreateConnection())
{
devices = await connection.FindAsync<Devices>(statement => statement
.Where($"{nameof(Devices.Token)} = '{token}');
}
return devices;
}
選項2:
public async Task<IEnumerable<Devices>> GetPreviousDevicesAsync(string token)
{
IEnumerable<Devices> devices;
using (var connection = _dbConnectionFactory.CreateConnection())
{
devices = await connection.FindAsync<Devices>(statement => statement
.Where($"{nameof(Devices.Token)} = '{token}');
return devices;
}
}
我想知道選項1代碼塊是否會以某種方式使連接保持打開狀態,因為任務將在離開using塊后完成。
希望您能提供幫助。
謝謝!
考慮以下代碼:
public async Task<IEnumerable<Devices>> GetPreviousDevicesAsync(string token)
{
Task<IEnumerable<Devices>> deviceTask;
using (var connection = _dbConnectionFactory.CreateConnection())
{
deviceTask = connection.FindAsync<Devices>(statement => statement
.Where($"{nameof(Devices.Token)} = '{token}');
}
return await deviceTask;
}
該代碼將繼續等待,可能在過程完成之前退出using塊並釋放連接。
但是,正如Matt.G所說,在這兩種情況下, await
都是在using
塊內的,以確保在任務完成之前不釋放連接,因此兩者將是相同的。
您正在呼叫await,在這兩種情況下,您都將在連接關閉之前檢索結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.