/// <summary>Snippet for Egress</summary> public async Task Egress() { // Snippet: Egress(CallSettings, BidirectionalStreamingSettings) // Create client TetherClient tetherClient = TetherClient.Create(); // Initialize streaming call, retrieving the stream object TetherClient.EgressStream response = tetherClient.Egress(); // Sending requests and retrieving responses can be arbitrarily interleaved // Exact sequence will depend on client/server behavior // Create task to do something with responses from server Task responseHandlerTask = Task.Run(async() => { // Note that C# 8 code can use await foreach AsyncResponseStream <EgressRequest> responseStream = response.GetResponseStream(); while (await responseStream.MoveNextAsync()) { EgressRequest responseItem = responseStream.Current; // Do something with streamed response } // The response stream has completed }); // Send requests to the server bool done = false; while (!done) { // Initialize a request EgressResponse request = new EgressResponse { Id = "", HttpResponse = new HttpResponse(), Status = new Status(), Project = "", TraceId = "", Endpoint = TetherEndpoint.Unspecified, Name = "", }; // Stream a request to the server await response.WriteAsync(request); // Set "done" to true when sending requests is complete } // Complete writing requests to the stream await response.WriteCompleteAsync(); // Await the response handler // This will complete once all server responses have been processed await responseHandlerTask; // End snippet }
public override stt::Task WriteAsync(EgressResponse message, grpccore::WriteOptions options) => _writeBuffer.WriteAsync(ModifyRequest(message), options);
public override stt::Task WriteAsync(EgressResponse message) => _writeBuffer.WriteAsync(ModifyRequest(message));
private EgressResponse ModifyRequest(EgressResponse request) { _service.Modify_EgressResponseRequest(ref request); return(request); }
partial void Modify_EgressResponseRequest(ref EgressResponse request);