Почему мой асинхронный контроллер веб-API ASP.NET блокирует основной поток?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему мой асинхронный контроллер веб-API ASP.NET блокирует основной поток?

Сообщение Anonymous »

У меня есть контроллер веб-API ASP.NET, который, как я думал, будет работать асинхронно. Контроллер предназначен для ожидания 20 секунд для первого запроса, но немедленно обслуживает все последующие запросы. Итак, мой предполагаемый график будет примерно таким:
  • Поднимите запрос 1.
  • Поднимите запрос 2.
  • Поднять запрос 3.
  • Запрос 2 возвращает.
  • Запрос 3 возвращает.
  • Подождите ~20 секунд.
  • Запрос 1 возвращается.
Вместо этого , нет запросов не возвращается, пока запрос 1 не будет завершен.

Я могу подтвердить (на основании результатов отладки), что входной поток и идентификатор спящего потока различаются. Я намеренно использовал TaskCreationOptions.LongRunning, чтобы перенести спящий режим в отдельный поток, но приложение все равно отказывается обслуживать любые новые запросы, пока этот спящий режим не завершится.

Могу ли я упустить что-то фундаментальное о том, как на самом деле работают асинхронные контроллеры веб-API?



public class ValuesController : ApiController
{
private static bool _firstTime = true;

public async Task Get()
{
Debug.WriteLine("Entry thread id: {0}. Sync: {1}",
Thread.CurrentThread.ManagedThreadId,
SynchronizationContext.Current);
await LongWaitAsync();
return "FOOBAR";
}

private Task LongWaitAsync()
{
return Task.Factory.StartNew(() =>
{
if (_firstTime)
{
_firstTime = false;
Debug.WriteLine("Sleepy thread id: {0}. Sync: {1}",
Thread.CurrentThread.ManagedThreadId,
SynchronizationContext.Current);
Thread.Sleep(20000);
Debug.WriteLine("Finished sleeping");
}
},
CancellationToken.None,
TaskCreationOptions.LongRunning,
TaskScheduler.Default);
}
}


Подробнее здесь: https://stackoverflow.com/questions/149 ... ain-thread
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Асинхронный статический метод блокирует поток пользовательского интерфейса [дублировать]
    Anonymous » » в форуме C#
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Веб-API C# ASP.NET в .NET 4.8 - асинхронность с «вложением» Content-Disposition по-прежнему блокирует контекст пользоват
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Сопрограмма Kotlin в Dispatchers.Main не блокирует основной поток
    Гость » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Гость
  • NSRunLoop::runUntilDate блокирует основной поток?
    Anonymous » » в форуме IOS
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • NSRunLoop::runUntilDate блокирует основной поток?
    Anonymous » » в форуме IOS
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»