public func atomic() : async () {
s := 1; //被回滚
ignore ping(); //被回滚,因为没有await,还没有真正调用ping()
ignore 0/0; // trap!
// a non-atomic method
public func nonAtomic() : async () {
s := 1;
let f = ping();
s := 2;
await f;
s := 3; // this will not be rolled back!
await f; //会重新调用ping(),f的实质不是ping()的返回值,而是类似于函数的调用接口
ignore 0/0;// trap!
actor{
var s = 0;
var pinged = false;
public func show() : async (Nat, Bool) {
(s, pinged)
public func ping() : async () {
pinged := true;
// an atomic method
public func atomic() : async () {
s := 1; //不会被回滚
await ping(); //不会被回滚
ignore 0/0; // trap!
// a non-atomic method
public func nonAtomic() : async () {
s := 1;
let f = ping();
s := 2;
await f;
s := 3; // this will not be rolled back!
await f; //会重新调用ping(),f的实质不是ping()的返回值,而是类似于函数的调用接口
ignore 0/0;// trap!