private static async Task ListenAsync(int roomId, string userName, CancellationToken cancellationToken) { var stream = _client.Listen(new ListenRequest { RoomId = roomId }); try { await foreach (var item in stream.ResponseStream.ReadAllAsync(cancellationToken)) { Console.WriteLine(); Console.WriteLine($"{item.UserName}: {item.Message}"); Console.WriteLine("> "); } } catch (RpcException e) when(e.StatusCode == StatusCode.Cancelled) { } catch (OperationCanceledException) { } finally { stream.Dispose(); } }
public void Join() { var response = client.Join(new ChatRequest() { Name = Name }); System.Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")} [{response.Name}] join {response.Status}"); cts = new CancellationTokenSource(); ListenTask = Task.Run(async() => { var listen = client.Listen(new ChatRequest() { Name = Name }); CancellationTokenSource _cts = null; _cts = new CancellationTokenSource(); do { try { await listen.ResponseStream.MoveNext(cts.Token); //if (!ret) continue; if (listen.ResponseStream.Current == null) { continue; } Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")}->{listen.ResponseStream.Current.Name}:{listen.ResponseStream.Current.Message}"); } catch (Exception ex) { Console.WriteLine(ex.Message); } } while (!cts.IsCancellationRequested); }, cts.Token); }