От https://msdn.microsoft.com/en-us/library/mt674882.aspx#Threads:Как асинхронно и ожидают замены существующих подходов?
Асинхронного подход, основанный на асинхронное программирование предпочтительнее существующих подходов почти в каждом случае. В частности, этот подход лучше, чем BackgroundWorker для операций с привязкой к IO, потому что код проще, и вам не нужно защищать от условий гонки. В сочетании с Task.Run, асинхронное программирование лучше, чем BackgroundWorker для операций с процессором, потому что асинхронное программирование разделяет координационные данные о запуске вашего кода из работы , что Task.Run передает в threadpool.
Мне кажется, что цепочка из async
функций должна в конечном итоге заканчиваться ожиданием чего-то случившегося, которое находится вне контроля вашей программы. Некоторая загрузка через Интернет или ввод пользователя или что-то в этом роде.
Как насчет ситуаций, когда ваша программа должна выполнять длительные вычисления? Это должно было бы быть в методе, который сам не использует await
, потому что нечего ждать, когда он выполняет всю работу. Если await
не используется, то управление не вернется обратно к вызывающей функции, правильно? Если это так, то, конечно, это даже не асинхронно.
Кажется BackgroundWorker
хорошо подходит для длительных вычислений: https://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx#Examples
Есть ли способ использовать async
/await
для этой цели?
Использование «BackgroundWorker» может быть преобразовано в несколько или одну «Задачу», а затем вы можете их ожидать. –
Я начал писать ответ, но понял, что ответ будет слишком длинным и слишком широким для форума. Но вкратце: понятие асинхронного программирования может быть немного сложно понять. Во многих случаях можно использовать асинхронное программирование, но не все. GUI - прекрасный пример, когда асинхронное программирование работает очень хорошо. Шахматы, не так много. Я бы посоветовал вам прочитать дополнительную литературу по этой теме, чтобы получить более глубокое понимание. –
async без ожидания на самом деле просто синхронно – Edward