AwaiterTypeShouldImplementINotifyCompletion() статический приватный Метод

ArgumentException with message like "Awaiter type '{0}' should implement 'INotifyCompletion'"
static private AwaiterTypeShouldImplementINotifyCompletion ( object p0 ) : Exception
p0 object
Результат System.Exception
Пример #1
0
        private static void ValidateAwaiterType(Type awaiterType, PropertyInfo isCompleted, MethodInfo getResult)
        {
            if (!typeof(INotifyCompletion).IsAssignableFrom(awaiterType))
            {
                throw Error.AwaiterTypeShouldImplementINotifyCompletion(awaiterType);
            }

            if (isCompleted == null || isCompleted.GetMethod == null)
            {
                throw Error.AwaiterTypeShouldHaveIsCompletedProperty(awaiterType);
            }

            if (isCompleted.PropertyType != typeof(bool))
            {
                throw Error.AwaiterIsCompletedShouldReturnBool(awaiterType);
            }

            if (isCompleted.GetIndexParameters().Length != 0)
            {
                throw Error.AwaiterIsCompletedShouldNotBeIndexer(awaiterType);
            }

            if (getResult == null || getResult.IsGenericMethodDefinition)
            {
                throw Error.AwaiterTypeShouldHaveGetResultMethod(awaiterType);
            }

            var returnType = getResult.ReturnType;

            if (returnType.IsByRef || returnType.IsPointer)
            {
                throw Error.AwaiterGetResultTypeInvalid(awaiterType);
            }
        }
        private static void ValidateAwaiterType(Type awaiterType, out Type resultType)
        {
            if (!typeof(INotifyCompletion).IsAssignableFrom(awaiterType))
            {
                throw Error.AwaiterTypeShouldImplementINotifyCompletion(awaiterType);
            }

            var isCompleted = awaiterType.GetProperty("IsCompleted", BindingFlags.Public | BindingFlags.Instance);

            if (isCompleted == null || isCompleted.GetMethod == null)
            {
                throw Error.AwaiterTypeShouldHaveIsCompletedProperty(awaiterType);
            }

            if (isCompleted.PropertyType != typeof(bool))
            {
                throw Error.AwaiterIsCompletedShouldReturnBool(awaiterType);
            }

            if (isCompleted.GetIndexParameters().Length != 0)
            {
                throw Error.AwaiterIsCompletedShouldNotBeIndexer(awaiterType);
            }

            var getResult = AwaitCSharpExpression.GetGetResult(awaiterType);

            if (getResult == null || getResult.IsGenericMethodDefinition)
            {
                throw Error.AwaiterTypeShouldHaveGetResultMethod(awaiterType);
            }

            var returnType = getResult.ReturnType;

            if (returnType.IsByRef || returnType.IsPointer)
            {
                throw Error.AwaiterGetResultTypeInvalid(awaiterType);
            }

            resultType = returnType;
        }