@sanphir

Почему может await не await'титься?

Привет.
Наткнулся на странное повдение при использовании async await выполнение кода просто обрывается.
Не продолжает ни синхроннно, ни ассинхронно. Exception'ов не происходит. Пример:
public async Task<IEnumerable<MailChimpUser>> GetAllMembersAsync(string listName)
 {
  try
  {
   //Обрывается после выполнения этой строчки
   var list = await GetListByName(listName);
   
   //Причем если вместо вызова "расскрыть метод", так 
   //var lists = await _apiManager.Lists.GetAllAsync().ConfigureAwait(false);
   //list = lists.FirstOrDefault(l => l.Name == name);
   //то выполнение продолжится

   var members = await _apiManager.Members.GetAllAsync(list.Id).ConfigureAwait(false);

   var result = members.Select(m => new MailChimpUser()
   {
      ...
   });
   //то же самое здесь, после return не возвращается в метод где его эвэйтят...
   return result;
  }
  catch (Exception ex)
  {
   var logger = LogManager.GetCurrentClassLogger();

	logger.Error(ex, ex.Message, new object[] { });
    throw ex;
  }
 }

 private async Task<MailChimp.Net.Models.List> GetListByName(string name)
 {
	try
	{
		var lists = await _apiManager.Lists.GetAllAsync().ConfigureAwait(false);
		var list = lists.FirstOrDefault(l => l.Name == name);

		if (list == null)
			throw new Exception(String.Format("MailChimp: List \"{0}\" not found", name));
		return list;
	}
	catch (Exception ex)
	{
		var logger = LogManager.GetCurrentClassLogger();

		logger.Error(ex, ex.Message, new object[] { });
		throw ex;
	}
}


Подскажите в чем косяк и как это можно поправить?
  • Вопрос задан
  • 365 просмотров
Решения вопроса 1
@mpnj
нужно так:
var list = await GetListByName(listName) .ConfigureAwait(false) ;

Собственно, когда вы "раскрыли", то не забыли написать .ConfigureAwait(false)

Стоит прочитать про ConfigureAwait и всякие дедлоки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы