private static TryOperationResult <object> ExecuteCallback(CancellationToken token, DispatchedWork callback, IThreadWorkSource s, CancellationToken token2) { return(callback(s, CancellationTokenSource.CreateLinkedTokenSource(token2, token).Token)); }
/// <summary> /// Blocks there current thread until results are available /// </summary> /// <param name="token"></param> /// <param name="callback"></param> /// <returns></returns> public TryOperationResult <object> SendWork( CancellationToken token, DispatchedWork callback) { var result = PostWork(token, callback); result.WaitForChange(-1); return(result); }
public bool TryGetWork(out DispatchedWork work) { foreach (var source in Sources) { if (source.TryGetWork(out work)) { return(true); } } work = null; return(false); }
/// <summary> /// Post work for to be executed on another thread without regard to when it returns /// </summary> /// <param name="token"></param> /// <param name="callback"></param> /// <returns>An operation result that can be waited on</returns> public TryOperationResult <object> PostWork(CancellationToken token, DispatchedWork callback) { var result = new TryOperationResult <object>(); _workers.Enqueue((source, token2) => { try { result.SetSuccess(ExecuteCallback(token, callback, source, token2).Result); } catch (Exception ex) { result.SetFailure(ex); } return(result); }); return(result); }
public TryOperationResult <object> SendWork(CancellationToken token, DispatchedWork callback) { var source = GetViableSource(); return(source.SendWork(token, callback)); }
public bool TryGetWork(out DispatchedWork work) { return(_workers.TryDequeue(out work)); }