Лучше ли вызывать асинхронные или синхронные версии метода из синхронной задачи?

1

Если я запускаю код в синхронной Задаче, лучше ли вызывать асинхронную версию метода и ждать результата или просто вызвать синхронную версию кода?

То есть, я буду использовать меньше ресурсов, если я создам новую задачу, используя myMethod1 или myMethod2?

public void SomeFunc() {
  // Wrapper code
  Task myTask = new Task(myMethod1);
  myTask.Run();
  // Do stuff
  myTask.Wait();
}

private void myMethod1() {
  CloudQueueMessage message = myCloudQueue.GetMessage();
  // do stuff
}

private void myMethod2() {
  CloudQueueMessage message = myCloudQueue.GetMessageAsync().Result;
  // do stuff
}

Мне интересно, если использование async-версии каким-то образом снова делает поток доступным в потоковом потоке во время работы async.

Теги:
asynchronous
threadpool

1 ответ

2
Лучший ответ

Мне интересно, если использование async-версии каким-то образом снова делает поток доступным в потоковом потоке во время работы async.

Это будет работать, только если вы делаете это асинхронно. Поскольку вы звоните. .Result задачу, вы блокируете поток во время ожидания. Таким образом, нет ничего полезного в использовании асинхронной версии этого кода.

Если это целая цель, было бы гораздо лучше написать:

public async Task SomeFunc() {
  // Wrapper code
  Task myTask = MyMethod1;
  // Do stuff
  await myTask;
}

private async Task myMethod1() {
   CloudQueueMessage message = await myCloudQueue.GetMessageAsync();
   // do stuff
}

Это сохраняет все асинхронное, включая вашу Task.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню