Is there a recommended best practices/guidance for exposing synchronous and asynchronous versions of an API in a class library? For instance, if I have the following 2 methods defined in a class library:

```
  public Task<string> GetSomeDataAsync()
    {
        //typically an IO operation that would be awaited on, simplified to return a Task for illustration
        return Task<string>.Factory.StartNew( () =>  "foo");
    }

    public string GetSomeDataSync()
    {
        var task = GetSomeDataAsync();
        task.ConfigureAwait(continueOnCapturedContext: false);
        return task.Result;
    }

```

The above could be hosted in a Winform/WPF/Console/ASP.NET client app.
Is it safe for a client to use the synchronous version above which uses task.Result, given that the task is configured not to capture any synchronization context to avoid potential deadlocks