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));
        }
Example #2
0
        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);
 }