Сообщение Re[9]: [Этюд] - синхронный vs асинхронный от 29.09.2021 10:58
Изменено 29.09.2021 11:07 Serginio1
Re[9]: [Этюд] - синхронный vs асинхронный
Здравствуйте, Shmj, Вы писали:
S>Так же из этого же метода приходится вызывать синхронные.
S>Что же делать?
S>> Ты внутри задачи которая лонг вызываешь асинхронный код который внутри в итоге и вызывает Thread.Sleep(1000)
S>Предлагайте решение.
Тут и так понятно если ты вызваешь долгий синхронный код, то и работай с ним синхронно.
Асинхронный код не поможет, а только засрет пул потоков. Или выделяй отдельно долгий синхронный метод в Task c LongRunning
В данном случае
S>Так же из этого же метода приходится вызывать синхронные.
S>Что же делать?
S>> Ты внутри задачи которая лонг вызываешь асинхронный код который внутри в итоге и вызывает Thread.Sleep(1000)
S>Предлагайте решение.
Тут и так понятно если ты вызваешь долгий синхронный код, то и работай с ним синхронно.
Асинхронный код не поможет, а только засрет пул потоков. Или выделяй отдельно долгий синхронный метод в Task c LongRunning
В данном случае
await Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
}, TaskCreationOptions.LongRunning);
class Program
{
static async Task AsyncMethod(int i)
{
await Task.Delay(1); // Много разных асинхронных вызовов...
await Task.Delay(1);
// Это убрать нельзя - эмуляция вызова асинхронного метода, который мы изменить не можем.
//Thread.Sleep(1000);
await Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
}, TaskCreationOptions.LongRu
Console.WriteLine(i);
}
static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
int iCopy = i;
// Вариант 2: асинхронный метод отрабатывате медленно (TaskCreationOptions.LongRunning не применяется)
Task.Factory.StartNew(async () =>
{
await AsyncMethod(iCopy);
}, TaskCreationOptions.LongRunning);
}
Console.ReadKey();
}
}
Re[9]: [Этюд] - синхронный vs асинхронный
Здравствуйте, Shmj, Вы писали:
S>Так же из этого же метода приходится вызывать синхронные.
S>Что же делать?
S>> Ты внутри задачи которая лонг вызываешь асинхронный код который внутри в итоге и вызывает Thread.Sleep(1000)
S>Предлагайте решение.
Тут и так понятно если ты вызваешь долгий синхронный код, то и работай с ним синхронно.
Асинхронный код не поможет, а только засрет пул потоков. Или выделяй отдельно долгий синхронный метод в Task c LongRunning
В данном случае
S>Так же из этого же метода приходится вызывать синхронные.
S>Что же делать?
S>> Ты внутри задачи которая лонг вызываешь асинхронный код который внутри в итоге и вызывает Thread.Sleep(1000)
S>Предлагайте решение.
Тут и так понятно если ты вызваешь долгий синхронный код, то и работай с ним синхронно.
Асинхронный код не поможет, а только засрет пул потоков. Или выделяй отдельно долгий синхронный метод в Task c LongRunning
В данном случае
await Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
}, TaskCreationOptions.LongRunning);
class Program
{
static async Task AsyncMethod(int i)
{
await Task.Delay(1); // Много разных асинхронных вызовов...
await Task.Delay(1);
// Это убрать нельзя - эмуляция вызова асинхронного метода, который мы изменить не можем.
//Thread.Sleep(1000);
await Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
}, TaskCreationOptions.LongRu
Console.WriteLine(i);
}
static void Main(string[] args)
{
for (int i = 0; i < 1000; i++)
{
int iCopy = i;
// Вариант 2: асинхронный метод отрабатывате медленно (TaskCreationOptions.LongRunning не применяется)
Task.Factory.StartNew(async () =>
{
await AsyncMethod(iCopy);
});
}
Console.ReadKey();
}
}