private async Task ListenLoop(HttpRequestMessage request) { try { _Response = await _Client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, _Cts.Token); _Body = await _Response.Content.ReadAsStreamAsync(); _Reader = new StreamReader(_Body); while (!_Cts.IsCancellationRequested) { string line = await WithCancellation(_Reader.ReadLineAsync(), _Cts.Token); if (line != null) { if (line.StartsWith("{\"result\":", StringComparison.OrdinalIgnoreCase)) { var invoiceString = JObject.Parse(line)["result"].ToString(); LnrpcInvoice parsedInvoice = _Parent.Deserialize <LnrpcInvoice>(invoiceString); await _Invoices.Writer.WriteAsync(ConvertLndInvoice(parsedInvoice), _Cts.Token); } else if (line.StartsWith("{\"error\":", StringComparison.OrdinalIgnoreCase)) { var errorString = JObject.Parse(line)["error"].ToString(); var error = _Parent.Deserialize <LndError>(errorString); throw new LndException(error); } else { throw new LndException("Unknown result from LND: " + line); } } } } catch when(_Cts.IsCancellationRequested) { }