Внесение изменений в пользовательский интерфейс после вызова ConfigureAwait (false) в проекте веб-формы - PullRequest
1 голос
/ 14 июня 2019

Могу ли я внести изменения в пользовательский интерфейс в веб-форму после вызова ConfigureAwait (false)?

protected async void btnX_onClick(object sender, EventArgs e)
{
  await myTask();
}

protected async Task myTask() {
  await anotherTask().ConfigureAwait(false);
  lblTaskSuccess.Text = "Success"; // UI Change
}

Полагаю, если SynchronizationContext - это пользовательский интерфейс (например, приложение Windows), я не смогу вносить изменения в пользовательский интерфейс.

Поскольку это проект веб-формы и SynchronizationContext является aspnet, могу ли я вносить изменения в пользовательский интерфейс (например, менять метку и т. Д.) Или нет?

1 Ответ

1 голос
/ 15 июня 2019

Я попробовал, и все заработало. Я не уверен, есть ли другие проблемы.

Некоторые API-интерфейсы ASP.NET отлично работают вне их SynchronizationContext, а другие - нет. Нужно это им или нет, не имеет документов. Я считаю, что те, которые работают без SynchronizationContext просто , случаются , чтобы работать без него; Я не верю, что они разработаны с учетом этого варианта использования. Другое соображение заключается в том, что ASP.NET SynchronizationContext обеспечивает одновременную работу только одного потока, поэтому он синхронизирует доступ ко всем объектам WebForms.

По этим причинам я всегда возобновляю работу в контексте ASP.NET, прежде чем обращаться к любому API ASP.NET. Это включает в себя настройку свойств WebForms. Так что я бы не стал использовать ConfigureAwait(false) здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...