Please consider re-opening this bug report.
>>The method calls that cause the behavior according the documentation are intended to be used by the compiler only
GetAwaiter().AwaitResult() is a slightly more permissive version of .Result(), which is fully supported for end user consumption by the .NET Framework. If you wish, use that instead of my AwaitResult() extension as the outcome is identical.
>>The work around is to use the synchronous equivalent method (Exists vs. ExistsAsync) if synchronous behavior is wanted.
Asynchronous behavior is desired here, but that doesn't mean every method will be async. There are no ToStringAsync() methods, for example. By not addressing this you are saying that if any part of the call stack is synchronous then the call to Couchbase MUST be synchronous as well. That's a pretty major limitation that doesn't exist with any other TAP-capable library (HttpClient, ADO, Oracle, NEST).
>>The Exists methods wrap observe, so another work around it to call observe and check if the keys exists.
If the only method I can safely call is synchronous Exists(), then there isn't much point in observing as I already have the result.