interface Foo : GLib.Object { public signal void message_received (); public void send_message (string message); } async void run () { _foo.send_message ("ping"); Timeout.add (2000, message_timeout); yield; //How to check if the async method ended well o wrong? } bool message_timeout () { //How to resume the async method with error? return false; } Foo _foo; void main (string[] args) { _foo = create_instance_of_foo (); _foo.message_received.connect (() => { //How to resume the async method without error? }); run.begin (); var loop = new GLib.MainLoop (null, false); loop.run (); }