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
1 year ago
|
#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
|