Я потратил часы, пытаясь понять это (название).Итак, у меня есть два метода:
public virtual TEntity GetByName(Expression<Func<TEntity, bool>> whereName)
{
return this.DbEntitySet.FirstOrDefault(whereName);;
}
и
public virtual async Task<TEntity> GetByNameAsync(Expression<Func<TEntity, bool>> whereName)
{
try
{
return await this.DbEntitySet.FirstOrDefaultAsync(whereName);
}
catch (AggregateException ae)
{
throw;
}
catch (Exception ex)
{
throw;
}
}
первый метод работает, как ожидалось, но второй работает нормально, если он найден, но входит в бесконечный процесс, если онне.Я ожидаю, что будет сгенерировано исключение (возможно, через AggregateException
), даже если оно не генерирует исключение TimeOutException.Я попытался изменить его, как:
public virtual async Task<TEntity> GetByNameAsync(Expression<Func<TEntity, bool>> whereName)
{
try
{
TimeSpan ts = TimeSpan.FromMilliseconds(5000);
Task<TEntity> task = this.DbEntitySet.FirstOrDefaultAsync(whereName);
if (!task.Wait(ts))
{
throw new TimeoutException();
}
return await task;
}
catch (AggregateException ae)
{
throw;
}
catch (Exception ex)
{
throw;
}
}
, а затем этот метод работает нормально WITHOUT ANY exception
.Любая помощь, пожалуйста ??
Вот как я называю этот метод (с начала)
//1
var activityManager = HttpContext.Current.GetOwinContext().Get<ActivityManager<ActivityModels>>();
activityManager.CreateAsync(model).GetAwaiter().GetResult();
//2
public virtual async Task<WebCoreResult> CreateAsync(TActivity activity)
{
this.ThrowIfDisposed();
if ((object)activity == null || string.IsNullOrEmpty(activity.ActivityName))
throw new ArgumentNullException(nameof(activity));
try
{
WebCoreResult result = await ActivityExistAsync(activity);
if (result.Succeeded)
return result;
}
catch (Exception)
{
throw;
}
//code removed for brevity
}
//3
public async Task<WebCoreResult> ActivityExistAsync(TActivity activity)
{
var a = await FindByNameAsync(activity.ActivityName);
//var a = FindByName(activity.ActivityName); //this one ok
if (a == null)
{
return await Task.FromResult(new WebCoreResult("Activity not exist"));
}
return await Task.FromResult(WebCoreResult.Success);
}
//4
public virtual async Task<TActivity> FindByNameAsync(string activityName)
{
this.ThrowIfDisposed();
if (activityName == null)
throw new ArgumentNullException(nameof(activityName));
return (TActivity)await this._activityStore.FindByNameAsync(activityName);
}
//5
public async Task<ActivityModels> FindByNameAsync(string name)
{
this.ThrowIfDisposed();
if (string.IsNullOrWhiteSpace(name))
{
throw new ArgumentNullException("activityname");
}
return await _activityStore.GetByNameAsync(x => x.ActivityName.ToLower() == name.ToLower());
}
//6 finale: GetByNameAsync method above