В приведенном ниже примере, когда асинхронная функция «Process» вызывается синхронно, я вижу, что вызов «await Task.Delay (1000)» приводит к зависанию пользовательского интерфейса.
Я знаю, что могу избежать зависания, либо вызвав «await Task.Delay (1000) .ConfigureAwait (false)», либо заключив вызов «Process» в другую задачу. Я понимаю, что проблема связана с контекстом синхронизации, и я знаю, что await делает с ним что-то необычное, например, если я заменю вызов «await Task.Delay (1000)» на «Task.Delay (1000) .Wait ()» пользовательского интерфейса не зависает.
Может кто-нибудь объяснить поведение (я пытался посмотреть код ildasm, но это не помогло). Большое спасибо.
public MainWindow()
{
InitializeComponent();
Loaded += OnLoaded;
}
public async void OnLoaded(object sender, RoutedEventArgs args)
{
var task = Process();
MessageBox.Show(task.Result);
}
public async Task<String> Process()
{
await Task.Delay(1000);
return "";
}