public static EventloopEntry RunBlockingPrim <A>(Fun0 <A> blockingAction, Fun2 <Exception, A, Unit> onSuccess) { EventloopEntry entry = GetEventloopEntry(); ThreadPool.QueueUserWorkItem((object info) => { Exception exception = null; A result = default(A); try { result = blockingAction.Call(); } catch (Exception exn) { exception = exn; } entry.Post(() => { onSuccess.Call(exception, result); }); }); return(entry); }