gRP C - процедуры для многих клиентов без блокировок в c# - PullRequest
0 голосов
/ 26 марта 2020

Допустим, у меня есть c# код, который доставляет клиенту список задач List с реквизитом:

public override Task<MyTasksResult> GetMyTasks(MyTasksRequest request, ServerCallContext context)
{
  return Task.FromResult(GetMyTasks(request, context));
}

private MyTasksResult GetMyTasks(MyTasksRequest request, ServerCallContext context)
{
  List<MyTask> list = _CoreService.GetMyTasks(request.MyTokenToFind);
  MyTasksResult t = new MyTasksResult();
  t.TaskList.AddRange(list);
  return t;
}

И, скажем, я не хочу делать эту асинхронность c метод, потому что полный набор задач должен составлять не более 50 мс. Но в любом случае, 50 мс это много времени! Итак, главный вопрос: выпустит ли этот код gRP C для получения большего количества запросов задач от других клиентов в том же методе GetMyTasks?

Я согласен, так как Thread.Sleep (x) может создать взаимоблокировка: вызовет ли сон или блокировку «_CoreService.GetMyTasks»? Или так как я уже установил Taks.FromResult в начале, я свободен от этого ?! Thks.

1 Ответ

1 голос
/ 26 марта 2020

Я знаю, что вы не хотите, но я думаю, вы должны сделать это asyn c. Если код попадает в живую среду, где сервер может быть замедлен сетевым трафиком c или любым другим количеством проблем, то вдруг ваш код может перестать работать. Ваш клиент сообщит о проблеме, и вам будет сложно попытаться ее воспроизвести.

...