AsyncPool.cs
        
        
            
                    44 lines
            
             | 1.1 KiB
            
                | text/x-csharp
            
             |
                CSharpLexer
            
          
        |  | r25 | using System; | ||
| using System.Threading; | ||||
| namespace Implab.Parallels { | ||||
| /// <summary> | ||||
| /// Класс для распаралеливания задач. | ||||
| /// </summary> | ||||
| /// <remarks> | ||||
| /// Используя данный класс и лямда выражения можно распараллелить | ||||
| /// вычисления, для этого используется концепция обещаний. | ||||
| /// </remarks> | ||||
| public static class AsyncPool { | ||||
| public static Promise<T> Invoke<T>(Func<T> func) { | ||||
| var p = new Promise<T>(); | ||||
| ThreadPool.QueueUserWorkItem(param => { | ||||
| try { | ||||
|  | r14 | p.Resolve(func()); | ||
|  | r25 | } catch(Exception e) { | ||
| p.Reject(e); | ||||
| } | ||||
| }); | ||||
| return p; | ||||
|  | r14 | } | ||
| public static Promise<T> InvokeNewThread<T>(Func<T> func) { | ||||
| var p = new Promise<T>(); | ||||
| var worker = new Thread(() => { | ||||
| try { | ||||
| p.Resolve(func()); | ||||
| } catch (Exception e) { | ||||
| p.Reject(e); | ||||
| } | ||||
| }); | ||||
| worker.IsBackground = true; | ||||
| worker.Start(); | ||||
| return p; | ||||
|  | r25 | } | ||
| } | ||||
| } | ||||
