簡體   English   中英

C#異步方法在using語句之外返回任務

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM