【发布时间】:2015-03-05 23:25:30
【问题描述】:
public async Task<Foo> Execute(int id)
{
var parameters = new { id};
using (var con = new SqlConnection(this.connectionString))
{
await con.OpenAsync();
return await con.QueryAsync<foo>(
"dbo.uspGetMeFoo",
parameters,
commandType: CommandType.StoredProcedure,
commandTimeout: int.Parse(ConfigurationManager.AppSettings["SqlCommandTimeout"]))
.ContinueWith(task => task.Result.FirstOrDefault());
}
}
此方法在调用类中等待,其中 - 一段时间后 - 我想在不显式阻塞的情况下使用结果。
我可以通过在调用代码中返回 Task<IEnumerable<Foo>> 和 FirstOrDefault() 来解决这个问题,而不是使用上面的 ContinueWith。
从我读过的内容来看,上面的阻塞很臭,更糟糕的是会导致问题,可能会导致死锁。我对么?
【问题讨论】:
标签: c# asynchronous task-parallel-library async-await task