view Implab.Test/PromiseHelper.cs @ 281:e0916ddc9950 v3 tip

code cleanup and refactoring
author cin
date Fri, 01 Jun 2018 21:35:24 +0300
parents d82909310094
children
line wrap: on
line source

using Implab;
using System;
using System.Threading;

namespace Implab.Test {
    static class PromiseHelper {
        public static IPromise<T> Sleep<T>(int timeout, T retVal, CancellationToken ct = default(CancellationToken)) {

            Timer timer = null;

            return Promise.Create<T>((d) => {
                timer = new Timer(x => {
                    d.Resolve(retVal);
                }, null, timeout, Timeout.Infinite);

                if(ct.CanBeCanceled)
                    ct.Register(d.Cancel);

            }).Finally(() => {
                Safe.Dispose(timer);
            });
        }

        public static IPromise Sleep(int timeout, CancellationToken ct = default(CancellationToken)) {
            Timer timer = null;

            return Promise.Create((d) => {
                timer = new Timer(x => {
                    d.Resolve();
                }, null, timeout, Timeout.Infinite);

                if(ct.CanBeCanceled)
                    ct.Register(d.Cancel);

            }).Finally(() => {
                Safe.Dispose(timer);
            });
        }
    }
}