Привет, ребята, у меня есть такой метод:
public virtual async Task StartSearch()
{
CancellationTokenSource = new CancellationTokenSource();
Context = ContextFactory.Create();
SearchResults = await Task.Factory.StartNew(() =>
{
try
{
IsLoading = true;
var resultTask = GetResults().ToListAsync(CancellationTokenSource.Token);
while (!resultTask.IsCompleted && !resultTask.IsFaulted &&
!CancellationTokenSource.Token.IsCancellationRequested)
Thread.Sleep(100);
IsLoading = false;
if (resultTask.IsFaulted)
throw resultTask.Exception ??
new Exception("Some error.");
return resultTask.IsCompleted && !resultTask.IsCanceled ? resultTask.Result : null;
}
catch (Exception)
{
IsLoading = false;
throw;
}
}, CancellationTokenSource.Token) ?? SearchResults;
}
Интересно, как я могу создать макет Задачи (со всеми этими полями IsFapted, IsCompleted, IsCaneled), которую я получаю из .ToListAsyn c () метод? Я обнаружил, что они не являются виртуальными, поэтому я не могу создать объект Task, чтобы просто издеваться над ними. Дополнительный вопрос: даст ли он мне что-нибудь, если я создам свой собственный фиктивный класс и высмею его для теста.
Каковы ваши предложения? Может быть, вы не хотите издеваться над этим?
Пока я только проверял это, чтобы проверить, вернет ли мой метод некоторые данные.
РЕДАКТИРОВАТЬ:
public abstract IQueryable<dynamic> GetResults();
и некоторые примерные реализации:
public override IQueryable<dynamic> GetResults()
{
var query = Context.Table.AsQueryable();
query = string.IsNullOrWhiteSpace(Field)
? query
: query.Where(table => table.Field.Contains(SomeFilter));
return query.Select(
table => new
{
table.Field1,
table.Field2,
table.Field3
}).OrderBy(table => table.Id);
}