2016-03-17 2 views
0
IMongoCollection<JobInfoRecord> records = ... 
foreach (var record in records.Find(query).ToListAsync().Result) 
{...} 

Это правда, что foreach итерация Я вычисляю .Result значение снова и снова?Как работает цикл foreach?

+1

Нет никакой пользы от использования 'Async' версии' ToList', если вы просто вызываете '.Result'. Вы должны «ждать» его. – Magnus

+0

Можете ли вы объяснить, почему? –

+1

@ivan_petrushenko Поскольку точка асинхронных методов не блокирует поток, но, вызывая 'Result', вы блокируете поток. Но так как вы хотите повторять результаты в вашем 'foreach', там не так много смысла вызывать' ToListAsync'. – juharr

ответ

1

Нет, он будет оценивать records.Find(query).ToListAsync().Result один раз, а затем набрать GetEnumerator. Затем каждый цикл будет называть MoveNext на возвращенном «Enumerator» и устанавливает record в свойство Current этого «Enumerator» с прерыванием цикла, когда MoveNext возвращает false.

Смежные вопросы