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; } }
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 }); } }
public ResultAdditionalInfo(object result, Type resultType, ResultAdditionalInfoTypes additionalInfoType = ResultAdditionalInfoTypes.SetResult) { this.Result = result; this.ResultType = new SerializableType(resultType); this.AdditionalInfoType = additionalInfoType; }