Using Task.Run(..) in a .NET property
You have just literally lost the async part of your ReadAsStringAsync method. By calling the Result property of your Task object, you will block your calling thread since it is going to wait for the async thread to return with the result of the operation. The Result property is just like the Wait method. 

You should use await instead of Result or Wait, since:


Result and Wait will encapsulate your Exception into an AggregateException.
You could easily encounter a deadlock situation. You shouldn't block on async code normally.


However, without Result and Wait you simply cannot make a property safely async. It is not supported in C#, only methods, lambda expressions or anonymous methods can use await. Properties should perform fast and non-blocking operations. If you want to perform a long running activity, don't make it a property (or just call a synchronous method in the setter).

private HttpContent Content;
private string SerializedContent;

public async Task SetHttpContent(HttpContent Content)
{
    this.Content = Content;
    SerializedContent = await Content.ReadAsStringAsync();
}

// ...

await SetHttpContent(new object);