That’s not a one way/fire-and-forget function.
Only a shared function with implicit or explicit return type ()
(never async ()
) is one way.
If you call, but don’t await the result, it will also complete asynchrously, but isn’t as safe for upgrades.
However, I’m still a little puzzled by that behaviour myself. What is the body of func_x
?
For example, I’m not seeing this behaviour in this program:
actor {
var log : Text = "";
func do_something_1 () {
log #= "something_1;";
};
func do_something_2 () {
log #= "something_2;";
};
func func_x(t : Text) : async () {
log #= t # ";";
};
public shared func test () : async Text {
log := "";
do_something_1();
try {
let future = await func_x("test");
} catch(err){};
do_something_2();
log;
}
}
Calling test() returns:
("something_1;test;something_2;")