AsyncPool.cs
28 lines
| 691 B
| text/x-csharp
|
CSharpLexer
/ Implab / AsyncPool.cs
user@factory.site.local
|
r0 | using System; | ||
using System.Threading; | ||||
namespace Implab { | ||||
/// <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 { | ||||
p.Resolve(func()); | ||||
} catch(Exception e) { | ||||
p.Reject(e); | ||||
} | ||||
}); | ||||
return p; | ||||
} | ||||
} | ||||
} | ||||