You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.1 KiB
100 lines
2.1 KiB
#if UNITY_METRO |
|
|
|
using System; |
|
using System.Collections; |
|
using System.Collections.Generic; |
|
using System.Linq; |
|
using System.Text; |
|
using System.Threading; |
|
|
|
#if NETFX_CORE |
|
using System.Threading.Tasks; |
|
#endif |
|
|
|
namespace UniRx |
|
{ |
|
public static partial class Scheduler |
|
{ |
|
public static readonly IScheduler ThreadPool = new ThreadPoolScheduler(); |
|
|
|
class ThreadPoolScheduler : IScheduler |
|
{ |
|
public DateTimeOffset Now |
|
{ |
|
get { return Scheduler.Now; } |
|
} |
|
|
|
public IDisposable Schedule(Action action) |
|
{ |
|
var d = new BooleanDisposable(); |
|
#if NETFX_CORE |
|
|
|
Task.Run(()=> |
|
{ |
|
if (!d.IsDisposed) |
|
{ |
|
action(); |
|
} |
|
}); |
|
|
|
#else |
|
Action act = () => |
|
{ |
|
if (!d.IsDisposed) |
|
{ |
|
action(); |
|
} |
|
}; |
|
|
|
act.BeginInvoke(ar => act.EndInvoke(ar), null); |
|
|
|
#endif |
|
|
|
return d; |
|
} |
|
|
|
public IDisposable Schedule(TimeSpan dueTime, Action action) |
|
{ |
|
var wait = Scheduler.Normalize(dueTime); |
|
|
|
var d = new BooleanDisposable(); |
|
|
|
#if NETFX_CORE |
|
|
|
Task.Run(()=> |
|
{ |
|
if (!d.IsDisposed) |
|
{ |
|
if (wait.Ticks > 0) |
|
{ |
|
Thread.Sleep(wait); |
|
} |
|
action(); |
|
} |
|
}); |
|
|
|
#else |
|
|
|
Action act = () => |
|
{ |
|
if (!d.IsDisposed) |
|
{ |
|
if (wait.Ticks > 0) |
|
{ |
|
Thread.Sleep(wait); |
|
} |
|
action(); |
|
} |
|
}; |
|
|
|
act.BeginInvoke(ar => act.EndInvoke(ar), null); |
|
|
|
#endif |
|
|
|
return d; |
|
} |
|
} |
|
} |
|
} |
|
|
|
#endif |