Я пытаюсь изменить существующий вызов базы данных, чтобы он выполнял асинхронные вызовы базы данных. Это мой первый набег на асинхронные вызовы базы данных, поэтому я просмотрел это сообщение, это сообщение и первые два раздела эту статью MSDN. Это код, который я придумал, он похож на тот, что найден во втором ответе второго сообщения:
public async Task<IEnumerable<Item>> GetDataAsync(int id)
{
using (SqlConnection conn = new SqlConnection(oCSB.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("stored_procedure", conn))
{
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("param", "value");
await conn.OpenAsync();
SqlDataReader reader = await cmd.ExecuteReaderAsync();
return ReadItems(reader, id).ToList();
}
}
}
private IEnumerable<Item> ReadItems(SqlDataReader reader, long id)
{
while (reader.Read())
{
var item = new Item(id);
yield return item;
}
}
Приложение представляет собой приложение веб-форм, и вызов инициируется запросом jQuery ajax к статическому WebMethod на странице aspx, который затем вызывает метод GetDataAsync. К сожалению, приложение зависает при вызове cmd.ExecuteReaderAsync без каких-либо исключений, и я не смог понять, почему. Я запускал его как на сервере VS dev, так и на своем локальном IIS 8, но получаю тот же результат. Я также попытался изменить его так, чтобы он делал очень простой выбор в таблице. Я также пытался изменить код на основе других сообщений, с которыми я столкнулся либо в MSDN, либо в SO. Кто-нибудь знает, что может быть причиной зависания при вызове ExecuteReaderAsync?
GetDataAsync()
? - person DavidG   schedule 29.07.2014Result
? Не имеет смысла. Либо синхронный, либо асинхронный. Не ожидание асинхронности. - person usr   schedule 29.07.2014