Ejemplo n.º 1
0
        private void SetResult <T>(T result, ResultAdditionalInfoTypes resultAdditionalInfoType = ResultAdditionalInfoTypes.SetResult)
        {
            if (result != null && result.GetType() != this.ResultType.Type)
            {
                throw new ArgumentException(
                          $"SetResult called with type: {result.GetType().FullName}, but expected type is: {this.ResultType.Type.FullName}.");
            }

            lock (this._taskCompletionSourceLocker)
            {
                this.ResultAdditionalInfo = new ResultAdditionalInfo(result, this.ResultType.Type, resultAdditionalInfoType);
                this._taskCompletionSourceAdditionalInfo.SetResult(this.ResultAdditionalInfo);
                ((TaskCompletionSource <T>) this._taskCompletionSource).SetResult(result);
                this.IsCompleted = true;
            }
        }
Ejemplo n.º 2
0
        public void SetResult(object result, ResultAdditionalInfoTypes resultAdditionalInfo = ResultAdditionalInfoTypes.SetResult)
        {
            if (result != null && result.GetType() != this.ResultType.Type)
            {
                throw new ArgumentException(
                          $"SetResult called with type: {result.GetType().FullName}, but expected type is: {this.ResultType.Type.FullName}.");
            }

            var setResult = this.GetType().GetMethods(BindingFlags.NonPublic | BindingFlags.Instance)
                            .FirstOrDefault(m => m.GetCustomAttributes(typeof(SetResultAttribute)).Any());

            if (setResult != null)
            {
                var genericSetResultMethod = setResult.MakeGenericMethod(this.ResultType.Type);
                genericSetResultMethod.Invoke(this, new[] { result, resultAdditionalInfo });
            }
        }
Ejemplo n.º 3
0
 public ResultAdditionalInfo(object result, Type resultType, ResultAdditionalInfoTypes additionalInfoType = ResultAdditionalInfoTypes.SetResult)
 {
     this.Result             = result;
     this.ResultType         = new SerializableType(resultType);
     this.AdditionalInfoType = additionalInfoType;
 }