public Task <AVUser> GetAsync(CancellationToken cancellationToken) { AVUser cachedCurrent; lock (mutex) { cachedCurrent = CurrentUser; } if (cachedCurrent != null) { return(Task <AVUser> .FromResult(cachedCurrent)); } return(taskQueue.Enqueue(toAwait => { return toAwait.ContinueWith(t => { object temp; AVClient.ApplicationSettings.TryGetValue("CurrentUser", out temp); var userDataString = temp as string; AVUser user = null; if (userDataString != null) { var userData = Json.Parse(userDataString) as IDictionary <string, object>; user = AVObject.CreateWithoutData <AVUser>(null); user.HandleFetchResult(AVObjectCoder.Instance.Decode(userData, AVDecoder.Instance)); } CurrentUser = user; return user; }); }, cancellationToken)); }