In this paper we argue that it is possible to couple the advantages of programming with the well-known abstraction of RPC with asynchronous programming models adequate for wide-area programming environments such as grids. We discuss how some ing language features can help create different programming abstractions over a basic asynchronous invocation primitive. The paper also discusses how coroutines (cooperative multitasking) can be used to allow computation to proceed while a client is waiting for the result of a remote invocation, avoiding the pitfalls of programming with threads.