view Implab.Test/PromiseHelper.cs @ 253:34df34841225 v3 v3.0.1-beta

Implab.Diagnostics drafts
author cin
date Mon, 12 Feb 2018 17:03:37 +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);
            });
        }
    }
}