89 lines
2.7 KiB
C#
89 lines
2.7 KiB
C#
|
using System;
|
|||
|
using System.Threading;
|
|||
|
|
|||
|
#if NET_STANDARD_2_0
|
|||
|
using System.Threading.Tasks;
|
|||
|
#endif
|
|||
|
|
|||
|
namespace BestHTTP.PlatformSupport.Threading
|
|||
|
{
|
|||
|
public static class ThreadedRunner
|
|||
|
{
|
|||
|
public static void RunShortLiving<T>(Action<T> job, T param)
|
|||
|
{
|
|||
|
#if NETFX_CORE
|
|||
|
#pragma warning disable 4014
|
|||
|
Windows.System.Threading.ThreadPool.RunAsync(_ => job(param));
|
|||
|
#pragma warning restore 4014
|
|||
|
#elif NET_STANDARD_2_0
|
|||
|
var _task = new Task(() => job(param));
|
|||
|
_task.ConfigureAwait(false);
|
|||
|
_task.Start();
|
|||
|
#else
|
|||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param)));
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void RunShortLiving<T1, T2>(Action<T1, T2> job, T1 param1, T2 param2)
|
|||
|
{
|
|||
|
#if NETFX_CORE
|
|||
|
#pragma warning disable 4014
|
|||
|
Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2));
|
|||
|
#pragma warning restore 4014
|
|||
|
#elif NET_STANDARD_2_0
|
|||
|
var _task = new Task(() => job(param1, param2));
|
|||
|
_task.ConfigureAwait(false);
|
|||
|
_task.Start();
|
|||
|
#else
|
|||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2)));
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void RunShortLiving<T1, T2, T3>(Action<T1, T2, T3> job, T1 param1, T2 param2, T3 param3)
|
|||
|
{
|
|||
|
#if NETFX_CORE
|
|||
|
#pragma warning disable 4014
|
|||
|
Windows.System.Threading.ThreadPool.RunAsync((param) => job(param1, param2, param3));
|
|||
|
#pragma warning restore 4014
|
|||
|
#elif NET_STANDARD_2_0
|
|||
|
var _task = new Task(() => job(param1, param2, param3));
|
|||
|
_task.ConfigureAwait(false);
|
|||
|
_task.Start();
|
|||
|
#else
|
|||
|
ThreadPool.QueueUserWorkItem(new WaitCallback(_ => job(param1, param2, param3)));
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void RunShortLiving(Action job)
|
|||
|
{
|
|||
|
#if NETFX_CORE
|
|||
|
#pragma warning disable 4014
|
|||
|
Windows.System.Threading.ThreadPool.RunAsync((param) => job());
|
|||
|
#pragma warning restore 4014
|
|||
|
#elif NET_STANDARD_2_0
|
|||
|
var _task = new Task(() => job());
|
|||
|
_task.ConfigureAwait(false);
|
|||
|
_task.Start();
|
|||
|
#else
|
|||
|
ThreadPool.QueueUserWorkItem(new WaitCallback((param) => job()));
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
public static void RunLongLiving(Action job)
|
|||
|
{
|
|||
|
#if NETFX_CORE
|
|||
|
#pragma warning disable 4014
|
|||
|
Windows.System.Threading.ThreadPool.RunAsync((param) => job());
|
|||
|
#pragma warning restore 4014
|
|||
|
#elif NET_STANDARD_2_0
|
|||
|
var _task = new Task(() => job(), TaskCreationOptions.LongRunning);
|
|||
|
_task.ConfigureAwait(false);
|
|||
|
_task.Start();
|
|||
|
#else
|
|||
|
var thread = new Thread(new ParameterizedThreadStart((param) => job()));
|
|||
|
thread.Start();
|
|||
|
#endif
|
|||
|
}
|
|||
|
}
|
|||
|
}
|