public async Task GetOrAddAsync()

in src/BackupExplorer/Parser/StateManager.cs [45:72]


        public async Task<T> GetOrAddAsync<T>(ITransaction tx, Uri name, TimeSpan timeout) where T : IReliableState
        {
            var result = await this.replicator.GetOrAddStateProviderAsync(
                (Transaction)tx,
                name,
                (Uri n) =>
                {
                    var passedType = typeof(T);
                    var needToWrap = !passedType.GetTypeInfo().IsClass;
                    var concreteType = needToWrap
                        ? this._typeCache.GetConcreteType(passedType)
                        : passedType;

                    return (IStateProvider2)Activator.CreateInstance(concreteType);
                },
                timeout,
                CancellationToken.None).ConfigureAwait(false);

            try
            {
                return (T)result.Value;
            }
            catch (InvalidCastException)
            {
                // add log
                throw;
            }
        }