Задать вопрос
@Nimus2000

Как реализованы асинхронные методы c#?

Конкретно как выполняются и где.
Например, верно, что просто выделяется там 1мс времени и происходит переключение выполнения? Если так то чем отличаются от потоков.
Или там вычисляется сколько инструкций в методе, и через N инструкций вставляется точка переключения.
Или какой то другой механизм. Типа инструкции асинхроного кода смешиваются с синхронным и выполняются одновременно. Есть ли вообще такой прием(или я его первый придумал), от по идее конвеер не стопает.

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

Например какой то такой код, как компилируется исполняется.
int[]arr=new int[100_000];
            int k = 0;
            var t1=Task.Run(() =>
            {
                while (true)
                {
                    for (int i = 0; i < arr.Length; i++)
                    {
                        arr[i] = k;
                    }
                    k = Interlocked.Add(ref k, 1);
                }
            });


            var t2=Task.Run(() =>
            {
                while (true)
                {
                    int c = 0;
                    for (int i = 0; i < arr.Length; i++)
                    {
                        if (arr[i] != k)
                        {
                            c++;
                        }
                    }
                    Console.WriteLine(c);
                }
            });
            await Task.WhenAny(t1, t2);


Или вот например Как такой код выполнится. Могут ли эти 2 функции смешаться в одну и объеденить цикл. Ведь в идеале, можно за 1 цикл пройтись и посчиатать min/max сразу же, последовательными командами, с разными регистрами, что улучшит конвеер процесора. Или как они будут выполнятся по частям сначала 1 порция цикла, потом другая.
t1=Task.Run(() => arr.Max());
t2=Task.Run(() => arr.Min());

 await Task.WhenAll(t1, t2);
  • Вопрос задан
  • 247 просмотров
Подписаться 2 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
@mvv-rus
Настоящий админ AD и ненастоящий программист
Вот вам перевод (часть первая, а всего там шесть частей) фундаменнтальной статьи по async/await одного из разрабочиков .NET в Microsoft (а именно - Stephen Toub).
Читайте и просвещайтесь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы