Как использовать выход для возврата коллекции Item в параллельном блоке или задачеC#

Место общения программистов C#
Ответить
Anonymous
 Как использовать выход для возврата коллекции Item в параллельном блоке или задаче

Сообщение Anonymous »

Мне нужна помощь, как использовать ключевое слово доходности для возврата IEnumerable в параллельных блоках или блоке задач.
Это псевдокод:< /p>

Код: Выделить всё

public IEnumerable ReadFile( )
{
foreach (string filepath in lstOfFiles)
{
var stream = new FileStream(filepath , FileMode.Open, FileAccess.Read);

foreach (var item in ReadStream(stream))
yield return item; //where item is of type List
}
}
Я хочу преобразовать приведенный выше код в параллельный блок следующим образом:

Код: Выделить всё

lstOfFiles.AsParallel()
.ForAll(filepath =>
{
var stream = new FileStream(filepath , FileMode.Open, FileAccess.Read);

foreach (var item in ReadStream(Stream))
yield return item;
});
но компилятор выдает ошибку, что выход нельзя использовать в параллельных блоках или анонимном делегате. Я также пробовал использовать блок задач, выход не разрешен в анонимном делегате задачи.
Любой может предложить мне простой и лучший способ получить выход для возврата сбора данных в параллельных блоках или задаче. p>
Я читал, что в приведенном выше сценарии можно использовать RX 2.0 или TPL. У меня есть сомнения, использовать ли библиотеку RX или TPL для асинхронного возврата доходности значений. Может ли кто-нибудь подсказать мне, что лучше: Rx или TPL.
Если я использую Rx, необходимо ли создавать подписку и конвертировать параллельный блок AsObservable.

Подробнее здесь: https://stackoverflow.com/questions/276 ... ck-or-task
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»