Если я запускаю код в синхронной Задаче, лучше ли вызывать асинхронную версию метода и ждать результата или просто вызвать синхронную версию кода?
То есть, я буду использовать меньше ресурсов, если я создам новую задачу, используя 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.
Мне интересно, если использование 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
.