gpt4 book ai didi

c# - 为什么在不使用 async/await 的情况下使用 Dapper QueryAsync 时抛出 TaskCanceledException?

转载 作者:太空狗 更新时间:2023-10-30 00:23:25 32 4
gpt4 key购买 nike

为什么在此方法上调用 .Result 会导致 TaskCanceledException:

public Task<IEnumerable<object>> GetAsync()
{
using (var conn = new SqlConnection("connectionString"))
{
return conn.QueryAsync<object>("select * from objects");
}
}

但是在这个方法上调用 .Result 是有效的:

public async Task<IEnumerable<object>> GetAsync()
{
using (var conn = new SqlConnection("connectionString"))
{
return await conn.QueryAsync<object>("select * from objects");
}
}

不同之处在于第二种方法中使用了 async\await 关键字。

最佳答案

第一个方法启动查询(调用 QueryAsync),然后处理 SqlConnection,然后返回表示该查询的任务。任务被取消,因为 SqlConnection 在完成之前被释放。

第二种方法启动查询(调用 QueryAsync),异步等待该查询完成,然后然后处理 SqlConnection。从第二个方法返回的任务代表该方法的完成。

有关async/await 的更多信息,请参阅my blog .

附带说明一下,您不应该使用带有 Result 的异步方法;您应该改用 await

关于c# - 为什么在不使用 async/await 的情况下使用 Dapper QueryAsync<T> 时抛出 TaskCanceledException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279094/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com