Question: I have to compute hash for huge payload, so I am using streams not to load all request content in memory. The question is what are the differences between this code:

```
using (var md5 = MD5.Create())
using (var stream = await authenticatableRequest.request.Content.ReadAsStreamAsync())
{
    return md5.ComputeHash(stream);
}

```

And that one:

```
using (var md5 = MD5.Create())  
using (var stream = new MemoryStream())
{
    await authenticatableRequest.request.Content.CopyToAsync(stream);
    stream.Position = 0;

    return md5.ComputeHash(stream);
}

```

I expect the same behavior internally, but maybe I am missing something.

Answer: 
The first version looks Ok, let the hasher handle the stream reading. It was designed for that. 

`ComputeHash(stream)` will read blocks in a while loop and call TransformBlock() repeatedly.

But the second piece of code *will* load everything into memory, so don't do that:

```
using (var stream = new MemoryStream())
{
    await authenticatableRequest.request.Content.CopyToAsync(stream);

```
> 
> I expect the same behavior internally, 
> 
> 
> 

Why? I mean, in one case you must load all into memory (because guess what, you define a memory stream). In the other case not necessarily.