Есть у меня код - static async Task Main(string[] args) { await Start(); } int maxBlock = 0; public static async Task Start() { for (; z < maxBlock; z++) { countBedrockInLineChank += await GetBedrockChunk(countBedrockInLineChank, z); } } public static async Task<long> GetBedrockChunk(long countBedrockInLineChank, int zCoord) { //вычисления на 6мин return countBedrockInChank; } Код static async Task Main(string[] args) { await Start(); } int maxBlock = 0; public static async Task Start() { for (; z < maxBlock; z++) { countBedrockInLineChank += await GetBedrockChunk(countBedrockInLineChank, z); } } public static async Task<long> GetBedrockChunk(long countBedrockInLineChank, int zCoord) { //вычисления на 6мин return countBedrockInChank; } По идеи своей он должен работать так, что await GetBedrockChunk(countBedrockInLineChank, z); каждый раз будешь ждать завершения рассчётов, но такового не происходит, что делать? Все говорят что троллер и всё должно работать
шёл 2021 год, боги даровали людям отладчик, стектрейс и статический анализ, но тролли всё ещё создают топики с вопросами почему код работает не так как задумано
Yotic, да пох на 6 мин, до меня не доходит что нужно исправить, ща попробую воспроизвести твой случай
если ты хотел for сделать асинхронным, то вот: public static async Task CountBedrockBlocks() { IEnumerable<Task> tasks = Enumerable.Range(0, maxBlock).Select(z => DoSth(countBedrockInLineChank, z)); await Task.WhenAll(tasks); } C# public static async Task CountBedrockBlocks() { IEnumerable<Task> tasks = Enumerable.Range(0, maxBlock).Select(z => DoSth(countBedrockInLineChank, z)); await Task.WhenAll(tasks); } и советую вместо изменения состояния объектов (значений countBedrockInLineChank [читать BlocksInLineCount]) использовать возвращаемые значения. если метод считает количество блоков пусть он это количество вернёт, а не закинет в какую-то переменную класса, состояние менять должен метод, который вызвал этот "посчитать"-метод. в данном случае это позволило бы в CountBedrockBlocks прибавить к "countBedrockInLineChank" результаты всех тасок простым linq-выражением --- Сообщение объединено с предыдущим 22 окт 2021 а ещё лучше чтоб сам CountBedrockBlocks возвращал количество блоков вместо void, на то он и "Count"
Yotic, чел всё работает, я скопировал твой вариант с синхронным выполнением и он работает, я переделал его в асинхронный (скинул его выше) и он тоже работает, в чем проблема то? все await срабатывают как должны
undrcrxwn, То есть, ты сделал +- нагрузку, мб Thread.Sleep(5000); и сделал 10 вызовов через фор, и программа за 50сек выполнится и всё это будет подрят?