public ActorTaskCompletionSource(IActorRuntime r, ITypedActorRuntime typedRuntime) { runtime = r; Task = runtime.StartNew(() => { TaskCompletionSourceHelper.Msg res = (TaskCompletionSourceHelper.Msg) runtime.CurrentMailbox().Receive(); if (res.state == TaskStatus.Canceled) { runtime.CancelSelf(); } if (res.state == TaskStatus.Faulted) { throw res.exception; } return((T)res.result); }); source = typedRuntime.Create <ITaskCompletionSource>( new TaskCompletionSourceHelper(runtime, runtime.MailboxFromTask(Task), Task)); }
public void Initialize(ITaskCompletionSource <RasConnection> completionSource, Action <StateChangedEventArgs> onStateChangedCallback, Action onCompletedCallback, CancellationToken cancellationToken) { if (completionSource == null) { throw new ArgumentNullException(nameof(completionSource)); } else if (onStateChangedCallback == null) { throw new ArgumentNullException(nameof(onStateChangedCallback)); } else if (onCompletedCallback == null) { throw new ArgumentNullException(nameof(onCompletedCallback)); } GuardMustNotBeDisposed(); lock (syncRoot) { cancellationSource?.Dispose(); cancellationSource = cancellationSourceFactory.Create(cancellationToken); this.cancellationToken = cancellationSource.Token; this.cancellationToken.Register(HangUpConnection); this.completionSource = completionSource; this.onStateChangedCallback = onStateChangedCallback; this.onCompletedCallback = onCompletedCallback; handle.Reset(); Completed = false; Initialized = true; } }
/// <summary> /// 任务的创建 /// </summary> /// <param name="resultType">result类型</param> public TaskCompletionSource(Type resultType) { var type = typeof(TaskCompletionSourceOf <>).MakeGenericType(resultType); this.taskSource = Activator.CreateInstance(type) as ITaskCompletionSource; }
public void Initialize(ITaskCompletionSource <RasConnection> completionSource, Action <StateChangedEventArgs> onStateChangedCallback, Action onCompletedCallback, CancellationToken cancellationToken) { AttachedObject.Initialize(completionSource, onStateChangedCallback, onCompletedCallback, cancellationToken); }