У меня есть метод async, который возвращает строку xml. Когда я добавляю задачу в список задач, она запускает задачу, но зависает при первом ожидании при разговоре с базой данных с использованием Entity Framework. Ниже приведен пример кода.async Task Freezes When Calling EF Async Methods
public async Task<ActionResult> GenerateXml(long id)
{
var tasks = new List<Task<string>>();
tasks.Add(GenerateXmlAsync(id));
Task.WaitAll(tasks.ToArray());
}
private async Task<string> GenerateXmlAsync(long id)
{
using (var dbContext = new MyDatabaseContext())
{
var item = await dbContext.Items.FirstOrDefaultAsync(itm => itm.Id = id);
/* do some calculations, generate the xml... */
var xml = "<generated by code above>";
return xml;
}
}
Использование потоковых журналов на Azure, я могу видеть, что задание выполняется, но никогда не делает это мимо метода асинхронной DbContext. Есть ли причина, по которой это может повесить?
проблемы с подключением ... можете ли вы его отладить? –
Если я изменил 'FirstOrDefaultAsync' на' FirstOrDefault' и удалил 'await', он отлично работает. –
Обязательная ссылка, чтобы избежать взаимоблокировок: https://msdn.microsoft.com/en-us/magazine/jj991977.aspx – ken2k