Is there a better example on how to implement multiple async requests. 

```
 // The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc ListSayHello1 (HelloRequest1) returns (stream HelloReply1) {}
  rpc ListSayHello2 (HelloRequest2) returns (stream HelloReply2) {}
}

// The request message containing the user's name.
message HelloRequest1 {
  string name = 1;
}

message HelloRequest2 {
  string name = 1;
}

// The response message containing the greetings
message HelloReply1 {
  string message = 1;
}

message HelloReply2 {
  string message = 1;
}

```

I am using below async pattern to handle `SayHello1`, but now I want to add support for `SayHello2`. What should be the approach? 

```
 new CallData(&service_, cq_.get(), *this);
    void* tag;  // uniquely identifies a request.
    bool ok;
    while (true) {
        // Block waiting to read the next event from the completion queue. The
        // event is uniquely identified by its tag, which in this case is the
        // memory address of a CallData instance.
        // The return value of Next should always be checked. This return value
        // tells us whether there is any kind of event or cq_ is shutting down.
        GPR_ASSERT(cq_->Next(&tag, &ok));
        GPR_ASSERT(ok);
        static_cast<CallData*>(tag)->Proceed();
    }

```

In `CallData`, I doing this 

```
void CallData::Proceed()
{
    if (status_ == CREATE) {

        status_ = PROCESS;
        service_->RequestListSayHello1(&ctx_, &request_, &writer_, cq_, cq_,
            this);
    }
... 
}

```