public static IWorkResult <T> EnqueueWork <T>(WorkType type, Func <T> function) { var workResult = new WorkResult <T>(); var action = new Action(() => { var result = function.Invoke(); workResult.SetResult(result); }); WorkQueue.Enqueue(new WorkEntry(type, action)); return(workResult); }