Почему существует исключение StackOverflow с ConfigureAwait (false) в приложении ASP.NET, но не с ConfigureAwait (TRUE)?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему существует исключение StackOverflow с ConfigureAwait (false) в приложении ASP.NET, но не с ConfigureAwait (TRUE)?

Сообщение Anonymous »

У меня есть asp.net с приложением .netframework 4.8. Я получаю исключение Stackoverflow. У меня есть метод действия, который вызывает другой метод CallbackMethod , где использование ConfigureAwait (false) в операторе запускает исключение переполнения стека. Но исключение StackOverflow происходит где -то после завершения задачи, которая влияет на это поведение. < /P>

Код: Выделить всё

public static async Task CallBackMethod(HttpRequestMessage request, string entityId, Func getEntity, Func action, string actionId) where T : Meta
{
// Changing to ConfigureAwait(true) ensures no Stackoverflow exception
request.Properties[Before] = await getEntity.Invoke(entityId).ConfigureAwait(false);
request.Properties[Target] = typeof(T).Name;
// Custom Exception is thrown from action.Invoke()
await action.Invoke().ConfigureAwait(false);
request.Properties[After] = (Func)(async () => await getEntity.Invoke(entityId).ConfigureAwait(false));
request.Properties[ActionId] = actionId;
}
Для конкретного сценария, вложенный метод, глубокий в этом действии. INVOKE Вызов в строке 3 бросает пользовательское исключение, которое ожидается. Но когда это произойдет, мое приложение бросает исключение StackOverflow и выходит.
Если я изменю первую строку в методе на < /p>
request.Properties[Before] = await getEntity.Invoke(entityId).ConfigureAwait(true)
< /code>
Тогда исключение Stackoverflow не брошено. Только ожидаемое пользовательское исключение брошено и обрабатывается.
Я думал, что в моем коде может быть какой -то рекурсивный вызов, но если я удвоил размер стека по умолчанию для моего приложения, то исключение Stackoverflow не брошено. Не в состоянии выяснить, что может вызвать исключение Stackoverflow. Я хотел понять, что меняется между ConfigureAwait (false) и True, что исключение StackOverflow не выбрасывается.
Минимальный пример Repro в этом репо
https://github.com/riteshksriv/testso

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

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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