Why do functions have to be async in order to use await within them?











up vote
-1
down vote

favorite












If I want to await a function, why does that have to be done in an async function only?



If I have this:



Function myFunc() {
return await myOtherFunc();
}


I get an error saying: “await expression is only allowed within an asynchronous function.”



I can understand if myOtherFunc() had to be asynchronous (it doesn't make sense to await an asynchronous function), but why does it care if the calling function is asynchronous or not. You can have a fork in a process within a synchronous function due to a call to an asynchronous function, right? So then why can’t you await that asynchronous function within the synchronous function?



NOTE: my question is NOT a duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?.



^ that question is asking what happens if await is not used in an async function. I'm asking why the function has to be async in order to use await. My response to DougBug below explains why they are different.










share|improve this question
























  • Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
    – emix
    Nov 9 at 20:03















up vote
-1
down vote

favorite












If I want to await a function, why does that have to be done in an async function only?



If I have this:



Function myFunc() {
return await myOtherFunc();
}


I get an error saying: “await expression is only allowed within an asynchronous function.”



I can understand if myOtherFunc() had to be asynchronous (it doesn't make sense to await an asynchronous function), but why does it care if the calling function is asynchronous or not. You can have a fork in a process within a synchronous function due to a call to an asynchronous function, right? So then why can’t you await that asynchronous function within the synchronous function?



NOTE: my question is NOT a duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?.



^ that question is asking what happens if await is not used in an async function. I'm asking why the function has to be async in order to use await. My response to DougBug below explains why they are different.










share|improve this question
























  • Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
    – emix
    Nov 9 at 20:03













up vote
-1
down vote

favorite









up vote
-1
down vote

favorite











If I want to await a function, why does that have to be done in an async function only?



If I have this:



Function myFunc() {
return await myOtherFunc();
}


I get an error saying: “await expression is only allowed within an asynchronous function.”



I can understand if myOtherFunc() had to be asynchronous (it doesn't make sense to await an asynchronous function), but why does it care if the calling function is asynchronous or not. You can have a fork in a process within a synchronous function due to a call to an asynchronous function, right? So then why can’t you await that asynchronous function within the synchronous function?



NOTE: my question is NOT a duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?.



^ that question is asking what happens if await is not used in an async function. I'm asking why the function has to be async in order to use await. My response to DougBug below explains why they are different.










share|improve this question















If I want to await a function, why does that have to be done in an async function only?



If I have this:



Function myFunc() {
return await myOtherFunc();
}


I get an error saying: “await expression is only allowed within an asynchronous function.”



I can understand if myOtherFunc() had to be asynchronous (it doesn't make sense to await an asynchronous function), but why does it care if the calling function is asynchronous or not. You can have a fork in a process within a synchronous function due to a call to an asynchronous function, right? So then why can’t you await that asynchronous function within the synchronous function?



NOTE: my question is NOT a duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?.



^ that question is asking what happens if await is not used in an async function. I'm asking why the function has to be async in order to use await. My response to DougBug below explains why they are different.







asynchronous async-await






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 10 at 23:27

























asked Nov 9 at 19:53









Gibran Shah

174




174












  • Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
    – emix
    Nov 9 at 20:03


















  • Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
    – emix
    Nov 9 at 20:03
















Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
– emix
Nov 9 at 20:03




Possible duplicate of Javascript Await/Async Feature - What if you do not have the await word in the function?
– emix
Nov 9 at 20:03












1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










The picture in the following article might help explain it to you a bit.



https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index



The basic idea though is that the async keyword allows the function to yield its execution up to a calling function.



As such any function that implements await must be marked async so that it can traverse back up the calling path until the first caller is only waiting on it to complete what it needs to do.






share|improve this answer





















  • Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
    – Gibran Shah
    Nov 10 at 23:21











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














 

draft saved


draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53232457%2fwhy-do-functions-have-to-be-async-in-order-to-use-await-within-them%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes








up vote
0
down vote



accepted










The picture in the following article might help explain it to you a bit.



https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index



The basic idea though is that the async keyword allows the function to yield its execution up to a calling function.



As such any function that implements await must be marked async so that it can traverse back up the calling path until the first caller is only waiting on it to complete what it needs to do.






share|improve this answer





















  • Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
    – Gibran Shah
    Nov 10 at 23:21















up vote
0
down vote



accepted










The picture in the following article might help explain it to you a bit.



https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index



The basic idea though is that the async keyword allows the function to yield its execution up to a calling function.



As such any function that implements await must be marked async so that it can traverse back up the calling path until the first caller is only waiting on it to complete what it needs to do.






share|improve this answer





















  • Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
    – Gibran Shah
    Nov 10 at 23:21













up vote
0
down vote



accepted







up vote
0
down vote



accepted






The picture in the following article might help explain it to you a bit.



https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index



The basic idea though is that the async keyword allows the function to yield its execution up to a calling function.



As such any function that implements await must be marked async so that it can traverse back up the calling path until the first caller is only waiting on it to complete what it needs to do.






share|improve this answer












The picture in the following article might help explain it to you a bit.



https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/async/index



The basic idea though is that the async keyword allows the function to yield its execution up to a calling function.



As such any function that implements await must be marked async so that it can traverse back up the calling path until the first caller is only waiting on it to complete what it needs to do.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 9 at 20:02









DougBug

362




362












  • Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
    – Gibran Shah
    Nov 10 at 23:21


















  • Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
    – Gibran Shah
    Nov 10 at 23:21
















Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
– Gibran Shah
Nov 10 at 23:21




Thanks DougBug. That article answered my question precisely. I didn't realize that the await operator returned control to the calling function. That would be impossible in a synchronous function, right?
– Gibran Shah
Nov 10 at 23:21


















 

draft saved


draft discarded



















































 


draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53232457%2fwhy-do-functions-have-to-be-async-in-order-to-use-await-within-them%23new-answer', 'question_page');
}
);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Xamarin.iOS Cant Deploy on Iphone

Glorious Revolution

Dulmage-Mendelsohn matrix decomposition in Python