What's the difference between PrepareAsyncX and AsyncX in grpc?

Say I have some grpc service service FooService{ rpc Foo(FooRequest) returns(FooResponse); } This will generate the following API in the client stub interface: Foo, PrepareAsyncFoo, and AsyncFoo. What is the difference between using PrepareAsyncFoo and AsyncFoo? I've found some examples on how to use PrepareAsyncFoo, but nothing on AsyncFoo. Is it a newer (easier?) API for making async calls?

What's the difference between PrepareAsyncX and AsyncX in grpc?

Say I have some grpc service

service FooService{
  rpc Foo(FooRequest) returns(FooResponse);
}

This will generate the following API in the client stub interface:

Foo, PrepareAsyncFoo, and AsyncFoo. What is the difference between using PrepareAsyncFoo and AsyncFoo? I've found some examples on how to use PrepareAsyncFoo, but nothing on AsyncFoo. Is it a newer (easier?) API for making async calls?