using Implab.Diagnostics; using System; using System.Threading; namespace Implab.Parallels { /// /// Класс для распаралеливания задач. /// /// /// Используя данный класс и лямда выражения можно распараллелить /// вычисления, для этого используется концепция обещаний. /// public static class AsyncPool { public static Promise Invoke(Func func) { var p = new Promise(); var caller = TraceContext.Snapshot(); ThreadPool.QueueUserWorkItem(param => { TraceContext.Transfer(caller); try { p.Resolve(func()); } catch(Exception e) { p.Reject(e); } }); return p; } public static Promise InvokeNewThread(Func func) { var p = new Promise(); var caller = TraceContext.Snapshot(); var worker = new Thread(() => { TraceContext.Transfer(caller); try { p.Resolve(func()); } catch (Exception e) { p.Reject(e); } }); worker.IsBackground = true; worker.Start(); return p; } } }