Во время длительного выполнения асинхронного метода, запущенного с Task.Run()
Мне может потребоваться вернуться к пользователю для дополнительного ввода или подтверждения, например, окна сообщения или диалогового окна файла, которое должно быть выполнено в потоке пользовательского интерфейса.
Есть ли простой способ сделать это?
private void buttonApply_Click (object sender, EventArgs e) {
try {
// ...
await executeAsync (_cts.Token, progress);
} catch (OperationCanceledException) { }
// ...
}
private async Task executeAsync (CancellationToken cancellationToken, IProgress<string> progress) {
// ...
await Task.Run (() => execute (path, cancellationToken, progress), cancellationToken);
}
private void execute (string path, CancellationToken cancellationToken, IProgress<string> progress) {
// do some work, report progress, check for cancellation
// --> depending on initial work, request additional input via UI thread, how?
// do more work, based on initial work and requested input
}