public static RemoteTask Start(Func <CancellationToken, Task> callback, RemoteCancellationToken remoteToken)
        {
            if (!RemotingServices.IsObjectOutOfAppDomain(remoteToken))
            {
                return(new RemoteTask(callback(remoteToken.Token)));
            }

            // Creates a cancellation token source in this AppDomain, and passes responsibility for cleaning it up to RemoteTask
            var MyTokenSource = new RemoteCancellationTokenSource(remoteToken);

            return(new RemoteTask(callback(MyTokenSource.Token), MyTokenSource));
        }
        internal RemoteCancellationTokenSource(RemoteCancellationToken remoteToken)
        {
            Debug.Assert(RemotingServices.IsObjectOutOfAppDomain(remoteToken), "Attempt to unwrap remote token inside the owning AppDomain");

            _Token = remoteToken;
        }
        public static RemoteTask <TResult> Start <TResult>(Func <CancellationToken, Task <TResult> > callback, RemoteCancellationToken remoteToken)
        {
            if (!RemotingServices.IsObjectOutOfAppDomain(remoteToken))
            {
                return(new RemoteTask <TResult>(callback(remoteToken.Token)));
            }

            var MyTokenSource = new RemoteCancellationTokenSource(remoteToken);

            return(new RemoteTask <TResult>(callback(MyTokenSource.Token), MyTokenSource));
        }