static Promise<int>customProgressPromise(bool autoStart = false)
    {
        var deferred = new Deferred<int>();
        deferred.action = () => {
            Thread.Sleep(500);
            var progress = 0f;
            while (progress < 1f) {
                progress += 0.01f;
                progress = Math.Min(1f, progress);
                deferred.Progress(progress);
                Thread.Sleep(7);
            }
            return 0;
        };

        return autoStart ? deferred.RunAsync() : deferred.promise;
    }