Я начинаю с TPL DataFlow. Я создал следующий рабочий код. readFilesBlock — это BufferBlock. Он заполняется следующим образом:
public async void ReadItems(ITargetBlock<SourceCodeFile> target)
{
foreach(var item in Source)
{
await target.SendAsync(item); //when To use post instead of sendasync?
}
}
target.Complete();
Теперь я использую BufferBlock (readFilesBlock) следующим образом.
while (await readFilesBlock.OutputAvailableAsync())
{
var file = await readFilesBlock.ReceiveAsync();
ActionBlock<SourceCodeFile> action = new ActionBlock<SourceCodeFile>(item => storeResultsInBag(resultBag, item));
await action.SendAsync(file);
}
Это работает нормально. Теперь я хочу использовать ссылку
Я попытался:
var storeFilesInBagAction = new ActionBlock<SourceCodeFile>(item => storeResultsInBag(resultBag, item));
readFilesBlock.LinkTo(storeFilesInBagAction);
await storeFilesInBagAction.Completion;
Но на этот раз я никогда не получу завершение.
Что я делаю не так?
Когда я не жду файлы магазина в Bagaction, предметы не возвращаются.
async void
. 2. Вам не нужно создавать новыйActionBlock
для каждого файла. - person svick   schedule 12.12.2013