PromiseHelper.cs
40 lines
| 1.1 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r289 | 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); | ||||
}); | ||||
} | ||||
} | ||||
} | ||||