Azure длительная функция активности вызова функции в foreach l oop. Это нормально? - PullRequest
0 голосов
/ 28 мая 2020

Можно ли вызывать функцию активности в al oop, например:?

foreach(var item in items)
{
    await context.CallActivityWithRetryAsync(....,item,...);
}

расширяя проблему, мне нужно выполнить 2 действия последовательно внутри l oop

var tasks = new List<Task<TypeA>>();

foreach(var item in items)
{
    var task = context.CallActivityWithRetryAsync(Activity2Name,item,...);

    tasks.Add(task);

    task.ContinueWith(t => {
        var innerTask =  context.CallActivityWithRetryAsync(Activity3Name,t.Result,...);
        return innerTask;
    },TaskContinuationOptions.ExecuteSynchronously );
}
await Task.WhenAll(tasks);

Возможно, мне стоит как-то добавить внутренние задачи в коллекцию задач, поэтому await будет ждать всех задач. А затем избавьтесь от TaskContinuationOptions.ExecuteSynchronously?

Вышеупомянутое работает. Но я не уверен, что это go правильный способ.

1 Ответ

1 голос
/ 28 мая 2020

Это хороший вопрос. Я не уверен на 100%, есть ли проблема, но вот мое предположение: ваш устойчивый контекст будет выполняться несколько раз, поэтому вам лучше дождаться всех действий за пределами l oop.

var tasks = new Task<long>[files.Length];
for (int i = 0; i < files.Length; i++)
{
        tasks[i] = context.CallActivityWithRetryAsync("FunctionName", files[i]);
}

await Task.WhenAll(tasks);

По крайней мере, так я успешно использую в своих проектах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...