Знаете ли вы, почему метод синхронизации Фибоначчи быстрее, чем асинхронное / ожидание, и быстрее, чем асинхронная задача?
Асинхронность не связана с улучшением необработанной скорости .Как вы обнаружили, это занимает больше времени в целом.Если вы используете его плохо, как вы это сделали, это делает вещи намного, намного медленнее с нулевой выгодой.
Основная проблема здесь в том, что вы не понимаете, для чего нужна асинхронность. Асинхронность для управления задержкой .Как только вы усвоите этот факт, вы начнете использовать его правильно.
Задержка - это разрыв во времени между тем, когда вы запрашиваете вычисление или побочный эффект, и когдарасчет или побочный эффект завершен .
Например, предположим, что вы вычисляете что-то, что чрезвычайно вычислительно дорого .Например, вы вычисляете действительно сложную графику, и на ее вычисление уйдет более 30 миллисекунд, даже если вы посвятите ей целое ядро.Вы не хотите, чтобы ваш пользовательский интерфейс зависал во время выполнения вычислений, поэтому вы можете поместить вычисления в другой поток, выделить ЦП этому потоку и дождаться результата. Ожидание означает «иди и найди больше работы, пока я жду завершения операции с высокой задержкой» .
Например, предположим, что вы делаете что-то, что не вычислительно дорого, но требует ожидания на внешнем ресурсе.Например, вы вызываете базу данных, и для получения результата потребуется более 30 мс.В этом случае вы не хотите раскручивать нить .Эта нить просто собирается спать в ожидании результата!Вместо этого вы хотите использовать асинхронную версию API доступа к базе данных, и ждут результата с высокой задержкой .
В вашем примере у вас нет операции с высокой задержкой для начала,так что нет смысла ждать этого.Все, что вы делаете - это создаете много работы для среды выполнения, чтобы создавать рабочие очереди и управлять ими, и это та работа, за которую вы платите, но не получаете никакой выгоды.Ваша работа занимает наносекунд ;Используйте асинхронность только для заданий, которые занимают миллисекунд или более.
Используйте асинхронность только при выполнении операции с большой задержкой .Async повышает производительность, поскольку освобождает поток для продолжения работы, пока он ожидает появления результата с высокой задержкой.Если нет результата с высокой задержкой, то async просто все замедлит.