У меня есть ~ 10000 объектов типа System.text.json.jsondocument. Для каждого JSondocument параллельно я должен выполнять следующие шаги в порядке. < /P>
Клон JSondocument в jsonNode < /li>
Применить последовательность задач, преобразующих jsonnode на месте < /li>
конвертируйте форму jsonnode apensearch < /li> < /> . /> Сохраните конвертированный jsonNode в структуру данных (возможно, одновременный балл) < /li>
< /ul>
Теперь, поскольку у меня есть ~ 10000 документов, я хотел бы обработать эти документы параллельно, применяя поток, который я изложено выше. Проблема - шаг 2 потока. Последовательность задач, которые будут применены на втором этапе, имеют разные характеристики: некоторые из них очень маленькие и быстрые, некоторые из них связаны с CPU, а некоторые связаны с IO. Например, STEP2 может иметь следующие вызовы (это всего лишь пример, я использую ActivatorUTILITIONS.CREATEINSTANCE для получения динамических задач во время выполнения). < /P>
await Task1(doc); // calls an API and updates doc
await Task2(doc); // make some heavy string manipulations to doc's properties and updates it. This returns a Task.CompletedTask.
< /code>
где < /p>
// Task1.cs
public class Task1 : ITask
{
public async Task RunAsync(JsonNode doc)
{
// call an API
// update doc's properties
}
}
// Task2.cs
// this also returns Task and can be awaited to make ITask uniform
public class Task2 : ITask
{
public Task RunAsync(JsonNode doc)
{
// heavy string/regex manipulations
// update doc's properties
return Task.CompletedTask;
}
}
< /code>
Как я понимаю, у меня есть эти параллельные варианты. В задачах процессора? Я думаю, что он может справиться с одновременным и параллельным выполнением, и, похоже, поддерживает перекрывающиеся выполнения между блоками. Единственные проблемы - это, если это излишнее из того, что я пытаюсь сделать, и я понятия не имею, как реализовать шаг2.
У меня есть ~ 10000 объектов типа System.text.json.jsondocument. Для каждого JSondocument параллельно я должен выполнять следующие шаги в порядке. < /P> [list] [*] Клон JSondocument в jsonNode < /li> Применить последовательность задач, преобразующих jsonnode на месте < /li> конвертируйте форму jsonnode apensearch < /li> < /> . /> Сохраните конвертированный jsonNode в структуру данных (возможно, одновременный балл) < /li> < /ul> Теперь, поскольку у меня есть ~ 10000 документов, я хотел бы обработать эти документы параллельно, применяя поток, который я изложено выше. Проблема - шаг 2 потока. Последовательность задач, которые будут применены на втором этапе, имеют разные характеристики: некоторые из них очень маленькие и быстрые, некоторые из них связаны с CPU, а некоторые связаны с IO. Например, STEP2 может иметь следующие вызовы (это всего лишь пример, я использую ActivatorUTILITIONS.CREATEINSTANCE для получения динамических задач во время выполнения). < /P> await Task1(doc); // calls an API and updates doc await Task2(doc); // make some heavy string manipulations to doc's properties and updates it. This returns a Task.CompletedTask. < /code> где < /p> // Task1.cs public class Task1 : ITask { public async Task RunAsync(JsonNode doc) { // call an API // update doc's properties } }
// Task2.cs // this also returns Task and can be awaited to make ITask uniform public class Task2 : ITask { public Task RunAsync(JsonNode doc) { // heavy string/regex manipulations // update doc's properties return Task.CompletedTask; } } < /code> Как я понимаю, у меня есть эти параллельные варианты. В задачах процессора? Я думаю, что он может справиться с одновременным и параллельным выполнением, и, похоже, поддерживает перекрывающиеся выполнения между блоками. Единственные проблемы - это, если это излишнее из того, что я пытаюсь сделать, и я понятия не имею, как реализовать шаг2. [/list] Я думаю об этом правильно?>