implement suspend.fn()