Просто сделайте так, чтобы Client-Streaming в gRPC Client отправлял сообщение снова и снова, когда он отправляет все данные
// add stream keyword when use in client side streaming
rpc HeavyLoadData(stream P2PMessages) returns (P2PMessages);
И вы также можете использовать двунаправленный, если хотите непрерывность
message P2PMessages{
string anything = 1;
}
rpc Messages(stream P2PMessages) returns (stream P2PMessages){};
И если вы хотите сделать что-то, что должно быть завершено, а затем вы хотите отправить данные, используйте блокировку
var lock = &sync.RWMutex{}
// it will lock until your logic completes
fun test(){
lock.RLock()
defer lock.RUnlock()
//do something your logic
}
Вы также можете использовать это, если у вас есть несколько клиентов, которые делают клиента и хотятдля отправки данных по завершении вашей логики используется
Сначала создайте карту клиента
var clients = make(map[string]string)
//then use the threading in go
go func(){
// maintain here all your client when you want to send the data to whom
}()