Linq-запрос в фоновом режиме - что-то в PLINQ - PullRequest
1 голос
/ 04 марта 2011

Есть ли что-то из коробки для запуска запроса Linq в фоновом режиме - может быть, на основе PLINQ?Я перепробовал несколько вещей, но не нашел подходящего подхода.

Я знаю, что могу создать фонового работника для этого, но я ищу что-то «я могу просто использовать», не требуя написаниявся обработка в одиночку.

Общая картина: я стараюсь, чтобы приложение WinForm реагировало на чтение данных (через LINQ) и избегало «блокировки» при чтении большого количества данных.

1 Ответ

3 голосов
/ 04 марта 2011

Вы можете создать Task<T>, и он обернет ваш запрос PLINQ.

PLINQ - это не создание асинхронных операций (что вы хотите), а параллельная обработка внутри одной (блокирующей) операции.,Вместо этого вы, вероятно, хотите сделать что-то вроде:

Task<IEnumerable<YourType>> task = Task.Factory.StartNew( 
       () => 
       {
           // Use standard LINQ here...
           return myCollection.Where(SomeCriteria);
       }
    );

// When this is completed, do something with the results
task.ContinueWith( t =>
{
    IEnumerable<YourType> results = t.Result;

    // Use results here (on UI thread - no invoke required)

}, TaskScheduler.FromCurrentSynchronizationContext());
...