Skip to content

Latest commit

 

History

History
99 lines (74 loc) · 4.77 KB

step05.md

File metadata and controls

99 lines (74 loc) · 4.77 KB

KatlaSport Project

Шаг 5. Async HiveService+HivesController

Задание

Заменить методы классов Классы HiveService и HivesController, которые написаны в синхронном стиле, на асинхронные версии с применением модификатора async и оператора await.

Выполнение

  1. "step5".

  2. Исправить IHiveService, чтобы методы соответствовали TAP.

  • Обернуть возвращаемые типы методов в Task<>. В случае, если метод возвращает void, заменить void на Task.
  • Добавить Task в комментарий или добавить комментарий , если его не было.
  • Добавить Async после имени метода.

Было:

/// <summary>
/// Gets something.
/// </summary>
/// <returns>A <see cref="Something"/>.</returns>
Something GetSomething();

/// <summary>
/// Does something.
/// </summary>
void DoSomething();

Стало:

/// <summary>
/// Gets something.
/// </summary>
/// <returns>A <see cref="Task{Something}"/>.</returns>
Task<Something> GetSomethingAsync();

/// <summary>
/// Does something.
/// </summary>
/// <returns>A <see cref="Task"/>.</returns>
Task DoSomethingAsync();
  1. Изменить методы сервиса HiveService, чтобы они стали асинхронными.
  • Исправить сигнатуры методов, чтобы они соответствовали сигнатурам методов в интерфейсе IHiveService.
  • Применить к сигнатурам методов модификатор async.
  • Заменить синхронный вызов метода ToArray на асинхронный ToArrayAsync.
  • Заменить синхронный вызов метода SaveChanges на асинхронный SaveChangesAsync.
  • Добавить к вызовам ToArrayAsync и SaveChangesAsync оператор await.

Пример:

public async Task<Something> GetSomethingAsync()
{
	var list = await _context.EntitySet.ToArrayAsync();
	return list.FirstOrDefault();
}
  1. Исправить HivesController.
  • Исправить сигнатуры синхронных методов - применить async и обернуть IHttpActionResult в Task.
  • Добавить к вызовам асинхронных методов сервиса оператор await.
  1. Удалить из интерфейса IAsyncEntityStorage метод SaveChanges.
  2. Удалить из класса DomainContextBase метод SaveChanges.
  3. Собрать проект, исправить ошибки и предупреждения (если есть).
  4. Сохранить изменения как отдельный коммит с понятным описанием "Replace sync. method calls in HivesController and HiveService with async.".
  5. "step5" -> "master".

Проверка

  1. GET /api/hives возвращает результат.
  2. GET /api/hives/1 возвращает результат.
  3. Поставить точку останова в HivesController.GetHives на строке с вызовом _hiveService.GetHives();
  4. GET /api/hives.
  5. Debug\Windows\Threads (Alt D W H).
  6. Записать ID и Managed ID текущего потока.
  7. F10.
  8. Debug\Windows\Threads.
  9. Сравнить ID и Managed ID текущего потока с записанными значениями.

Материалы

Материалы для самостоятельного изучения:

Дополнительные материалы: