public IValueContainer Decompose(object value) { return(new AwaiterContainer { Task = TaskAwaiterUtils.GetTask(value) }); }
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); }