Как поточно-ориентированно и сделать параллельные задачи, распараллеливание и потокобезопасность - PullRequest
0 голосов
/ 13 июня 2019

Я хочу, чтобы мой код был оптимизирован, а также безопасный асинхронный поток в C #.У меня есть код, который в настоящее время достаточно избыточен, чтобы использовать дважды Task.WhenAll, я планирую использовать только один и убедиться, что задача является поточно-ориентированной и параллельной.

Это моя текущая реализация, которую я считаю лучшейНа мой взгляд, на данный момент любой человек может предложить более оптимизированную версию.

 var tasks = new List<Task>();
// check for null reference for the items
if (results != null && results.items != null)
{
    // multithreaded might not be supported by the post request
    // changed to single thread for loop
    for(var i = 0; i < results.items.Count; i++) {
        var request = new PostAutoActionExecRequestJson()
        {
            ActionID = model.A_ID,
            Changes = new List<object>(),
            History = new HistoryJson()
            {
                Comment = model.Comment,
                DatastoreID = results.items[i].d_id,
                ItemID = results.items[i].i_id
            },
            RevNo = results.items[i].rev_no,
        };

        tasks.Add(services.PostAutoActionExecAsync<ExpandoObject>(request, token));
    }

    tasks.Add(CalculateNextExecution(model));
    await Task.WhenAll(tasks);
}

Вставленный код должен выполняться асинхронно и завершать задачу одновременно.

Пожалуйста, дайте мне знать, пожалуйста.

...