Использование Orderby для BatchedJoinBlock (из T1, T2) — поток данных (библиотека параллельных задач)

Я просто хочу иметь возможность сортировать результаты BatchedJoinBlock (http://msdn.microsoft.com/en-us/library/hh194683.aspx), чтобы разные результаты разных целей оставались вместе. Я объясню! Пример в некотором псевдокоде:

Dim batchedJoin = New BatchedJoinBlock(Of String, object)(4)
    batchedJoin.Target1.Post("String1Target1")
    batchedJoin.Target2.Post(CType(BuildIt, StringBuilder1))
    batchedJoin.Target1.Post("String1Target2")
    batchedJoin.Target2.Post(CType(BuildIt, StringBuilder2))
Dim results = batchedJoin.Receive()
'This sorts one result...
Dim SortByResult = results.Item1.OrderBy(Function(item) item.ToString, New NaturalStringComparer)

В основном у меня есть строка и объект, переменная SortByResult выше сортирует строки точно так, как я хотел бы, чтобы они сортировались. Я ищу способ получить объекты, которые раньше были с одним и тем же номером индекса в target2, в том же порядке. например если "String1Target1" меняет порядок, я хотел бы как-то надежно сослаться на него или соединить его вместе с "StringBuilder1". Фактическим конечным результатом должно быть только то, что объекты (target2) сортируются в порядке, определяемом сортируемыми строками (target1). Что-то типа:

   Dim EndResult = results.Item2.OrderBy(strings in target1)

но я с удовольствием приму промежуточное решение! Я также пытался использовать словарь (results.Item2.ToDictionary) со строкой в ​​качестве ключа (что также было бы прекрасным решением), но это немного выходит за рамки моего понимания, используя выражения лямба в правильном контексте. Я действительно могу сделать это в несколько шагов со списком или чем-то еще, но я пытаюсь получить что-то более эффективное/что-то узнать, и кажется, что есть много вариантов по умолчанию с результатами совместного блока, которые я просто не понимаю. достаточно опытен в использовании. Заранее благодарим за любую помощь, которую вы можете предоставить!


person Finch042    schedule 15.09.2013    source источник
comment
Почему вы используете BatchedJoinBlock для этого? Разве вы не можете объединить две части данных (возможно, в Tuple), а затем использовать обычный BatchBlock?   -  person svick    schedule 15.09.2013
comment
Стоит попробовать! Спасибо за идею.   -  person Finch042    schedule 16.09.2013
comment
@svick честно работал как шарм. Просто нужен был кто-то, чтобы указать на очень очевидное для меня, я думаю. Спасибо еще раз.   -  person Finch042    schedule 16.09.2013


Ответы (1)


Мне кажется, что вы на самом деле не хотите BatchedJoinBlock, потому что две части данных всегда объединяются. Лучшим вариантом для этого было бы BatchBlock из Tuple<string, object>. Когда у вас это есть, вы можете напрямую использовать LINQ для сортировки каждой партии:

results.OrderBy(Function(tuple) tuple.Item1)
person svick    schedule 17.09.2013