[NAME] ALL.dao.concurrent.async-class [TITLE] 异步类 [DESCRIPTION] 异步类是一种特殊的类,当这种异步类的对象调用一个方法时, 这个调用将被自动地当作异步调用处理 ,并创建轻任务返回未来值。 这种轻任务将被存在一个队列里,并按它们存入队列的顺序执行。 因此,这种异步对象在行为上很类似 actor model 里的actor。因为这里调用这种对象的方法就跟给act or发消息一样, 而调用参数即是消息内容。 对于每个异步对象,轻任务将按存入队列的顺序执行, 这基 本等同actor按消息将收顺序处理消息。 异步类的定义由在普通类的定义里的类名后加异步模式标志!!组成。 这里是个简单的例子: 1 class Account !! 2 { 3 private 4 5 var balance = 0 6 7 public 8 9 routine Account( init = 0 ){ 10 balance = init 11 } 12 routine Withdraw( amount: int ) => enum<false,true> 13 { 14 if ( balance < amount ) return $false 15 balance -= amount 16 return $true 17 } 18 routine Deposit( amount: int ) => int 19 { 20 balance += amount 21 return balance 22 } 23 routine Balance() => int 24 { 25 return balance 26 } 27 } 28 29 var acount1 = Account( 100 ) 30 var acount2 = Account( 100 ) 31 32 var future1 = acount1.Withdraw( 10 ) 33 if( future1.value() == $true ){ 34 var future2 = acount2.Deposit( 10 ) 35 } 36 37 var future3 = acount1.Deposit( 20 ) 38 39 io.writeln( 'Balance in account1:', acount1.Balance().value() ) 40 io.writeln( 'Balance in account2:', acount2.Balance().value() )