Esempio n. 1
0
        private T Create <T>(T concrete, ICancellableDispatcher dispatcher) where T : class
        {
            var interceptors = new IInterceptor[] { new DispatcherInterceptor <T>(dispatcher) };
            var options      = GetProxyGenerationOptions(dispatcher);

            return(_Generator.CreateInterfaceProxyWithTarget <T>(concrete, options, interceptors));
        }
Esempio n. 2
0
        private static object DynamicDispatch(MethodInfo genericMethodInfo, ICancellableDispatcher dispatcher, IInvocation invocation, object context = null)
        {
            var solvedTask = invocation.Method.ReturnType.GetTaskType();
            var methodInfo = genericMethodInfo.MakeGenericMethod(solvedTask.Type);

            return(methodInfo.Invoke(context, new object[] { dispatcher, invocation }));
        }
Esempio n. 3
0
        private ProxyGenerationOptions GetProxyGenerationOptions(ICancellableDispatcher dispatcher)
        {
            var options = new ProxyGenerationOptions();

            if (!(dispatcher is IFiber fiber))
            {
                return(options);
            }

            options.AddMixinInstance(new FiberProvider(fiber));
            return(options);
        }
Esempio n. 4
0
 public DispatcherManager(ICancellableDispatcher dispatcher)
 {
     _Dispatcher = dispatcher;
 }
Esempio n. 5
0
 private static object DynamicEnqueue(ICancellableDispatcher dispatcher, IInvocation invocation)
 => DynamicDispatch(_Proceed, dispatcher, invocation);
Esempio n. 6
0
 private static object Proceed <TResult>(ICancellableDispatcher dispatcher, IInvocation invocation) =>
 dispatcher.Enqueue(invocation.Call <Task <TResult> >);
Esempio n. 7
0
 private static object Enqueue(ICancellableDispatcher dispatcher, IInvocation invocation) =>
 dispatcher.Enqueue(invocation.Call <Task>);
Esempio n. 8
0
        private static object Enqueue(ICancellableDispatcher dispatcher, IInvocation invocation, int cancellationTokenPosition)
        {
            var cancellationToken = (CancellationToken)invocation.Arguments[cancellationTokenPosition];

            return(dispatcher.Enqueue(invocation.Call <Task>, cancellationToken));
        }
Esempio n. 9
0
 private static object Dispatch(ICancellableDispatcher dispatcher, IInvocation invocation)
 {
     dispatcher.Dispatch(invocation.Call);
     return(null);
 }
Esempio n. 10
0
 internal object DynamicProceedWithCancellation(ICancellableDispatcher dispatcher, IInvocation invocation)
 => DynamicDispatch(_ProceedForCancellation, dispatcher, invocation, this);
Esempio n. 11
0
            internal object ProceedWithCancellation <TResult>(ICancellableDispatcher dispatcher, IInvocation invocation)
            {
                var cancellationToken = (CancellationToken)invocation.Arguments[_Index];

                return(dispatcher.Enqueue(invocation.Call <Task <TResult> >, cancellationToken));
            }
Esempio n. 12
0
 public DispatcherInterceptor(ICancellableDispatcher dispatcher)
 {
     _Dispatcher = dispatcher;
 }
Esempio n. 13
0
 public TaskEnqueueWithCancellationTester(ICancellableDispatcher cancellableDispatcher)
 {
     _CancellableDispatcher = cancellableDispatcher;
 }
Esempio n. 14
0
 internal DispatcherInterceptor(ICancellableDispatcher dispatcher)
 {
     _Dispatcher = dispatcher;
 }