public Task SetAsync(ParseUser user, CancellationToken cancellationToken) { return(_taskQueue.Enqueue(toAwait => { return toAwait.ContinueWith(_ => { Task saveTask; if (user == null) { saveTask = _storageController .LoadAsync() .OnSuccess(t => t.Result.RemoveAsync("CurrentUser")) .Unwrap(); } else { // TODO (hallucinogen): we need to use ParseCurrentCoder instead of this janky encoding var data = user.ServerDataToJsonObjectForSerialization(); data["objectId"] = user.ObjectId; if (user.CreatedAt != null) { data["createdAt"] = user.CreatedAt.Value.ToString(ParseClient.DateFormatStrings.First(), CultureInfo.InvariantCulture); } if (user.UpdatedAt != null) { data["updatedAt"] = user.UpdatedAt.Value.ToString(ParseClient.DateFormatStrings.First(), CultureInfo.InvariantCulture); } saveTask = _storageController .LoadAsync() .OnSuccess(t => t.Result.AddAsync("CurrentUser", Json.Encode(data))) .Unwrap(); } CurrentUser = user; return saveTask; }, cancellationToken).Unwrap(); }, cancellationToken)); }