Продолжить выполнение метода, не ожидая выполнения другого метода - PullRequest
0 голосов
/ 22 октября 2018

Я хочу вызвать метод внутри какого-либо метода и не хочу, чтобы процесс ожидал или занимал время при завершении другого метода.

как этот

public ActionResult Insert(int userId)
{
     _userService.Insert(userId);
     SyncUserInSomeOtherCollection(userId);
     return new EmptyResult();
}

private SyncUserInSomeOtherCollection(int userId)
{
  //Do Sync work which will actually take some time
}

Я хочу сделать SyncUserInSomeOtherCollection() работает таким образом, чтобы основной метод возвращал результат без ожидания.

Я пытался выполнить задачу, подобную этой

Task.Run(async () => await SyncUserInSomeOtherCollection(userId)).Result;

Но не уверен, что это хороший подход кследовать.

1 Ответ

0 голосов
/ 22 октября 2018

Исходя из кода, которым вы поделились, я предполагаю, что вы работаете в ASP.NET.Я сталкивался с тем же сценарием и обнаружил, что QueueBackgroundWorkItem работает на меня, он также позволяет вам корректно завершить долгосрочное задание, когда рабочий процесс остановлен / завершен.

HostingEnvironment.QueueBackgroundWorkItem(cancellationToken =>
{
  if (!cancellationToken.IsCancellationRequested)
  {
    //Do Action
  }
  else
  {
    //Handle Graceful Shutdown
  }
}

Есть и другие способывыполнить это.Я предлагаю вам пройти через эту отличную статью Скотта Хансельмана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...