Result AddItem(HttpResponseMessage response, Uri uri, CancellationToken token) { var timestamp = Timestamp.FromResponse(uri, response); #if NET5_0 var meta = MetaData.FromEnumerables(response.Headers, response.Content.Headers, response.TrailingHeaders); #else var meta = MetaData.FromEnumerables(response.Headers, response.Content.Headers); #endif var tempFile = FilePair.GetTemp(); try { using var httpStream = response.Content.ReadAsStream(token); using (var contentFileStream = FileEx.OpenWrite(tempFile.Content)) using (var metaFileStream = FileEx.OpenWrite(tempFile.Meta)) using (var writer = new Utf8JsonWriter(metaFileStream)) { JsonSerializer.Serialize(writer, meta); httpStream.CopyTo(contentFileStream); } return(BuildResult(timestamp, tempFile)); } finally { tempFile.Delete(); } }
Task <Result> AddItemAsync(HttpResponseMessage response, Uri uri, CancellationToken token) { var timestamp = Timestamp.FromResponse(uri, response); Task <Stream> ContentFunc(CancellationToken cancellationToken) => response.Content.ReadAsStreamAsync(cancellationToken); var meta = MetaData.FromEnumerables(response.Headers, response.Content.Headers, response.TrailingHeaders()); return(InnerAddItemAsync(token, ContentFunc, meta, timestamp)); }