powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / async/await и потеря контекста синхронизации: помогите воспроизвести проблему.
3 сообщений из 3, страница 1 из 1
async/await и потеря контекста синхронизации: помогите воспроизвести проблему.
    #39497236
rigor mortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,
что-то затруднился. Фрагмент статьи на хабре про асинхронные вызовы:

Если вы обязаны ожидать выполнения задачи в одном из этих контекстов, вы можете использовать ConfigureAwait, чтобы сказать системе, что она не должна выполнять фоновую задачу в вашем контексте. Недостатком этого является то, что фоновая задача не будет иметь доступа к тому же самому контексту синхронизации, так что вы потеряете доступ к Windows UI или HttpContext (хотя ваш контекст безопасности всё равно будет у вас).

https://habrahabr.ru/post/162353/

Я что-то не очень понимаю в чём здесь может выражаться потеря доступа к HttpContext, на примере ASP.NET MVC. Сделал так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public async Task<ActionResult> Index()
        {
            WebClient client = new WebClient();
            await client.DownloadStringTaskAsync("www.habr.ru").ConfigureAwait(false);//false - выполнять последующий код в другом контексте

            string userName = HttpContext.User.Identity.Name;//2
            return View();
        }



Где-то на строке 2 должны возникнуть проблемы? Как вообще проиллюстрировать проблему потери доступа к вызывающему контексту после await?
...
Рейтинг: 0 / 0
async/await и потеря контекста синхронизации: помогите воспроизвести проблему.
    #39497248
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigor mortis,

Не сможешь получить HttpRequest и что-то записать в HttpResponse, так как глобальный объект HttpContext будет равен null. Однако в случае MVC, у тебя будет ссылка на контекст в ContollerContext, так что проблемы особой нет.
...
Рейтинг: 0 / 0
async/await и потеря контекста синхронизации: помогите воспроизвести проблему.
    #39497763
rigor mortis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, действительно, свалилось на строке 2:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
        public async Task<ActionResult> Index()
        {
            WebClient client = new WebClient();
            await client.DownloadStringTaskAsync("www.habr.ru").ConfigureAwait(false);//false - выполнять последующий код в другом контексте

            string name = System.Web.HttpContext.Current.User.Identity.Name;//2
            return View();
        }



А что если такая конструкция:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public ActionResult Index()
        {
            Task.Factory.StartNew(() =>
            {
                string name = System.Web.HttpContext.Current.User.Identity.Name;//2
            }, 
            CancellationToken.None, 
            TaskCreationOptions.None, 
            TaskScheduler.FromCurrentSynchronizationContext());//3

            return View();
        }



Здесь в строке 2 не свалится так как в при запуске Task установлена опция TaskScheduler.FromCurrentSynchronizationContext() в строке 3. Значит ли это что Task.Factory.StartNew() запустит задачу в том же потоке в котором он сам вызывался? То есть по факту никакой многопоточности не будет (смысла нет, но для понимания работы).
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / async/await и потеря контекста синхронизации: помогите воспроизвести проблему.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]