> Am 23.08.2017 um 12:29 schrieb Thomas via swift-evolution 
> <swift-evolution@swift.org>:
> 
> 
>> On 23 Aug 2017, at 11:28, Thomas via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> 1. What happens to the actor's queue when the body of a (non void-returning) 
>> actor method awaits away on some other actor? Does it suspend the queue to 
>> prevent other messages from being processes? It would seem to be the 
>> expected behavior but we'd also need a way to detach from the actor's queue 
>> in order to allow patterns like starting a long-running background operation 
>> and still allowing other messages to be processed (for example, calling a 
>> cancel() method). We could still do these long-running operations by passing 
>> a completion block to the method, rather than via its return value. That 
>> would clarify this goes beyond this one actor message, but we're back to the 
>> old syntax...
> 
> Maybe that's where Futures would come in handy? Just return a Future from the 
> method so callers can await long-running operations.

If you wrap the call to a long-running operation of another actor in a 
`beginAsync`, I would assume that other `actor funcs` of your actor will be 
able to run even while
 the long-running operation is pending:

actor class Caller {
  let callee = Callee()
  var state = SomeState()

  actor func foo() {
    beginAsync {
      let result = await callee.longRunningOperation()
      // do something with result and maybe state
    }
  }
  actor func bar() {
    // modify actor state
  }
}

Note, that in this case while waiting asynchronously on the long-running 
operation, the state of the caller might get changed by another of its `actor 
funcs` running.
Sometimes this might be intended - e.g. for cancellation - but it also could 
lead to hard to find bugs...

> 
> Thomas
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to