[swift-evolution] [Concurrency] async/await + actors

Thomas tclementdev at free.fr
Fri Aug 18 10:32:18 CDT 2017

The compiler could rewrite this:

print(await dataModel.getNumberOfEntries())

actor func getNumberOfEntries() -> Int
    return theList.count

as this:

dataModel.getNumberOfEntries(_internalQueue) { count in

actor func getNumberOfEntries(queue: DispatchQueue, handler: Int -> Void) -> Void
    _internalQueue.async {
        let count = theList.count
        queue.async {

There is another problem that bothers me, if the function were to await on another actor (and therefore dispatch away from its _internalQueue), how would you guarantee that "only one message is processed by the actor at a time". You would need to somehow prevent the internal queue from processing other messages.


> On 18 Aug 2017, at 17:13, Johannes WeiƟ via swift-evolution <swift-evolution at swift.org> wrote:
> GCD doesn't actually allow you to dispatch back to the original queue, so I find it unclear how you'd achieve that. IMHO the main reason is that conceptually at a given time you can be on more than one queue (nested q.sync{}/target queues). So which is 'the' current queue?

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170818/df09b87b/attachment.html>

More information about the swift-evolution mailing list