Как работает Async в .net 4.5 и выше? как он отличается от BeginInvoke и EndInvokeКак работает Async/ожидание .net 4.5
ответ
Async и ждут работы с библиотекой задач. Если вы пишете метод и хотите сделать его асинхронным, вам просто нужно пометить его как асинхронный вызов и вызвать ожидание любой задачи внутри вашего метода. Просто ключевое слово await делает ваш метод асинхронным, и только этот код работает async. Например:
//This Method isn't async because there is no await
private async Task DoSomething()
{
//Some work
}
//This method is async because it awaits sth.
private async Task DoSomething()
{
await SomeOtherStuff();
}
Обратите внимание, что методы async возвращают задачу или задачу, которые инкапсулируют ваш тип возвращаемого значения. Эта задача позволяет другим методам ждать вашего метода. Таким образом, вы создаете цепочку, которая заканчивается в вашем графическом интерфейсе. Таким образом, вы не блокируете и не реагируете на GUI.
Я нашел эту схему через 1 секунду в гугле, описывающих это поведение довольно хорошо:
Это не так много, чтобы сделать с BeginInvoke и EndInvoke, потому что Invoke звонки только для использования Gui объектов разные потоки. Если возможно, вам следует избегать BeginInvoke и EndInvoke и использовать графический интерфейс только на вашем Mainthread.
Привет, Пожалуйста, поместите некоторые диаграммы последовательности, потому что я знаю, что приведенная выше диаграмма скопирована с некоторого веб-сайта – TsunamiCoder
Вы можете найти много ответов на этот вопрос в Интернете, и это не является конкретным вопросом для переполнения стека. Посмотрите это, чтобы узнать async/wait: http://stackoverflow.com/documentation/c%23/48/async-await#t=201701250624127863526 и загляните сюда, чтобы задать хорошие вопросы: http://stackoverflow.com/ help/how-to-ask – Sebi
Можете ли вы объяснить с некоторыми диаграммами концепции потоков в Async/await – TsunamiCoder
@TsunamiCoder Вы можете найти мое [async intro] (http://blog.stephencleary.com/2012/02/async-and -await.html). –