> 
> Le 18 sept. 2017 à 18:07, Pierre Habouzit <[email protected]> a écrit :
> 
> 
> -Pierre
> 
>> On Sep 18, 2017, at 2:04 AM, Trevör Anne Denise 
>> <[email protected] <mailto:[email protected]>> wrote:
>> 
>>> 
>>> Le 18 sept. 2017 à 07:57, Pierre Habouzit <[email protected] 
>>> <mailto:[email protected]>> a écrit :
>>> 
>>>> On Sep 17, 2017, at 3:52 AM, Trevör ANNE DENISE via swift-evolution 
>>>> <[email protected] <mailto:[email protected]>> wrote:
>>>> 
>>>> Hello everyone,
>>>> 
>>>> I have a few questions about async await in Swift.
>>>> 
>>>> Say that you have :
>>>> 
>>>> func foo() async {
>>>>    print("Hey")
>>>>    await bar()
>>>>    print("How are you ?")
>>>> }
>>>> 
>>>> First of all, am I right to say that :
>>>> 1) If the bar function wasn't an async function, the thread would be 
>>>> blocked until bar returns, at this point print("How are you ?") would be 
>>>> executed and its only after that that the function calling foo() would get 
>>>> back "control"
>>> 
>>> I don't think you can quite call await without marking foo() as async (?).
>> 
>> 
>> Yes, that's what I meant, case one would call foo() without await if it 
>> wasn't async.
>> 
>> 
>>> 
>>>> 2) Here (with async bar function), if bar() takes some time to execute,
>>> 
>>> Not quite, `await bar()` is afaict syntactic sugar for:
>>> 
>>> bar {
>>>     printf("How are you ?");
>>> }
>>> 
>>> Where bar used to take a closure before, the compiler is just making it for 
>>> you. bar itself will be marked async and will handle its asynchronous 
>>> nature e.g. using dispatch or something else entirely.
>>> This has nothing to do with "time".
>> 
>> 
>> If it's just syntactic sugar then how does this solve this issue mentioned 
>> in the concurrency manifesto ?
>> "Beyond being syntactically inconvenient, completion handlers are 
>> problematic because their syntax suggests that they will be called on the 
>> current queue, but that is not always the case. For example, one of the top 
>> recommendations on Stack Overflow is to implement your own custom async 
>> operations with code like this (Objective-C syntax):"
> 
> "where" things run is not addressed by async/await afaict, but Actors or any 
> library-level usage of it.
> 


So since async await don't have any impact on where things are executed, what 
would happen concretely with this code ?

func slowFunction(_ input: [Int]) async -> [Int] {
        var results = [Int]()
        for element in input {
                results += [someLongComputation(with: element)]
        }
        return results
}

beginAsync {
        await slowFunction(manyElements)
}

I didn't specified anything about which queue/thread runs this code, so what 
would happen ? Would beginAsync block until slowFunction completes ?


Trevör


_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to