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));
        }