public IValueContainer Decompose(object value) { return(new AwaiterContainer { Task = TaskAwaiterUtils.GetTask(value) }); }
public IObjectComposer SelectComposer(Type targetType) { if (TaskAwaiterUtils.IsAwaiterType(targetType)) { return(_taskAwaiterSerializer); } if (typeof(Task).IsAssignableFrom(targetType)) { return(_taskSerializer); } if (typeof(ServiceProxyContext).IsAssignableFrom(targetType)) { return(_serviceProxySerializer); } if (typeof(CancellationTokenSource).IsAssignableFrom(targetType)) { return(_cancellationTokenSourceSerializer); } if (targetType == typeof(CancellationToken)) { return(_cancellationTokenSerializer); } return(null); }
public IObjectDecomposer SelectDecomposer(Type valueType) { if (TaskAwaiterUtils.IsAwaiterType(valueType)) { return(_taskAwaiterSerializer); } if (typeof(Task).IsAssignableFrom(valueType)) { return(_taskSerializer); } if (typeof(CancellationTokenSource).IsAssignableFrom(valueType)) { return(_cancellationTokenSourceSerializer); } if (valueType == typeof(CancellationToken)) { return(_cancellationTokenSerializer); } if (typeof(IProxy).IsAssignableFrom(valueType)) { return(_serviceProxySerializer); } return(null); }
public IObjectComposer SelectComposer(Type targetType) { if (TaskAwaiterUtils.IsAwaiterType(targetType)) { return(_taskAwaiterSerializer); } if (typeof(Task).IsAssignableFrom(targetType)) { return(_taskSerializer); } if (typeof(ServiceProxyContext).IsAssignableFrom(targetType)) { return(_serviceProxySerializer); } if (typeof(CancellationTokenSource).IsAssignableFrom(targetType)) { return(_cancellationTokenSourceSerializer); } if (targetType.IsConstructedGenericType && targetType.GetGenericTypeDefinition() == typeof(TaskCompletionSource <>)) { return(_taskCompletionSourceSerializer); } if (targetType == typeof(CancellationToken)) { return(_cancellationTokenSerializer); } return(null); }
public object Compose(IValueContainer container, Type valueType) { var values = (AwaiterContainer)container; var awaiter = Activator.CreateInstance(valueType); TaskAwaiterUtils.SetTask(awaiter, values.Task); return(awaiter); }
private bool TryFindDelayPromise( IAsyncStateMachine stateMachine, out Task delayPromise) { #warning such analysis can be optimizer by pre-compiling the code per state machine type var metadata = _asyncStateMachineMetadataProvider.GetMetadata(stateMachine.GetType()); foreach (var variable in metadata.LocalVariables) { if (TaskAwaiterUtils.IsAwaiterType(variable.FieldInfo.FieldType)) { var awaiter = variable.FieldInfo.GetValue(stateMachine); var task = TaskAwaiterUtils.GetTask(awaiter); if (task != null && DelayPromiseAccessor.IsDelayPromise(task)) { delayPromise = task; return(true); } } } delayPromise = null; return(false); }