2012-02-14 12 views
7

Uczę się programowania asynchronicznego przy użyciu C# i zwykle używam BeginInvoke, ale nie jestem bardzo pewien innych metod tworzenia aplikacji asynchronicznej.Ile modeli rozwoju Asyncronous w .NET?

poprosiłem pytanie o to, patrz link poniżej więcej szczegółów:

How to return T value from BeginInvoke?

podano łącza, Gravell powiedział, że istnieją cztery modele rozwoju asynchronicznego

tam co najmniej 4, a następnie - regularne oddzwanianie (non-APM, non-EAP) nie jest również niezbyt często

Ale przelewowy powiedział, że istnieją trzy:

Są 3 modele rozwoju asynchronicznego w .NET

  • APM - (BeginXXX/EndXXX), które używasz tutaj, gdy długo biegania Zadanie zostało zakończone, wywołuje ponownie kod w kodzie EndXXX, który jest oparty na zdarzeniach. W tym modelu, gdy kończy się długo działające zadanie, wydarzenie jest zgłaszane w celu poinformowania o kodzie.

  • TPL - Nowość w .NET 4, jest to wersja oparta na zadaniach. Wygląda jak programowanie synchroniczne do kodu klienta przy użyciu płynnego interfejsu. Jego połączenia z powrotem do kodu przy użyciu ContinueWith.

Ktoś może mi w tym pomóc?

Często wyszukiwałam stronę google.com, ale w rzeczywistości używają one najczęściej BeginInvoke. dzięki za pomoc.

Odpowiedz

3

Thread.Start - brutalny

delegate.BeginInvoke/EndInvoke - 'stara' norma

ThreadPool.QueueUserWorkItem - Smart

TaskFactory.StartNew - jedynym sposobem na to poprawne (według Patterns of parallel programming książki | polecam Ci go czytać pierwszy do ujednoznacznienia)

+0

Dzięki za odpowiedź, jak o modelu opartego na imprezie? – CharlieShi

+1

@CharlieShi to tylko makrowy wzór, który można łatwo wykonać za pomocą jednej z tych "metod tworzenia asynchronicznych" operacji. bez względu na to, który byś wybrał. BTW w .NET 5 będzie zunifikowana metoda asynchronicznego tworzenia metod z 'async/wait' keywords – Mikant

+0

wtedy myślę, że w .net 5, jest nam łatwiej poradzić sobie z funkcją asynchroniczną. A co z WPF? Uczyłem się go teraz, nie wiem, czy jest jakaś świetlana przyszłość do nauki. – CharlieShi

1

Z pewnością warto zapoznać się z metodami opisanymi przez Mikanta dla asynchronicznego rozwoju. Chciałem tylko powiedzieć, że C# 5.0 całkowicie zmienia sposób, w jaki język radzi sobie z asynchronizacją. To będzie jego główny temat wraz z wprowadzeniem dwóch nowych słów kluczowych, asynchronicznych i czekam. Po prostu wywołaj oczekiwanie na długo działające zadanie, a rozpocznie ono zadanie i zwróci kontrolę nad metodą wywołującą. Po zakończeniu zadania przechodzi do reszty kodu.

Oto doskonałe wideo z pełnymi szczegółami jego użycia i wyjaśnienia. Opisuje nie tylko stary sposób wykonywania operacji asynchronicznych, ale także kompletny przegląd nowego stylu.Dzięki temu pisanie aplikacji asynchronicznych jest o wiele łatwiejsze i łatwiejsze do odczytania dzięki naturalnemu przepływowi.

Jest to przyszłość zachowania asynchronicznego języka C#, które warto poznać.

http://channel9.msdn.com/events/PDC/PDC10/FT09/

+1

+1. Jon Skeet posiada również wiele informacji na temat nowego 'async' funkcjonalność w swoim blogu„EduAsync”po serii: http://msmvps.com/blogs/jon_skeet/archive/tags/Eduasync/default.aspx – CodingWithSpike

+0

@ rally25rs thx za Witryna, którą polecasz, bardzo mocno przystepuje do witryny. – CharlieShi

1

Jest wiele rzeczy, które mogą zostać wciągnięte w perspektywie rozwoju „asynchroniczny”.


Dla jednego może chcesz wykonanie kodu w wątku tła. Niedawno zaktualizowałem blog post of mine, kontrastując kilka typowych podejść do wykonywania kodu w tle. Oto lista, w kolejności od najbardziej pożądanej do najmniejszej:

  1. Task (używana przez async/ewait).
  2. Task (używane przez zadanie Biblioteka równoległa).
  3. BackgroundWorker.
  4. Delegate.BeginInvoke.
  5. ThreadPool.QueueUserWorkItem.
  6. Thread

Na innej strony, można chcieć do reprezentuje operację asynchroniczną (które mogą lub nie mogą mieć rzeczywisty kod wykonywany w wątku tła). W tym przypadku, istnieje kilka sposobów, w kolejności od najbardziej pożądane najmniej:

  1. Task (w stylu Task-based Asynchronous Pattern (TAP))
  2. IAsyncResult z Begin*/End* metod (który ma niefortunne nazwisko Asynchronous Programming Model (APM)).
  3. Komponent napisany przy użyciu Event-based Asynchronous Pattern (EAP).

(Na marginesie, BackgroundWorker to EAP, a Delegate.BeginInvoke to APM).


na innej strony, można oznaczać asynchronicznego programowanie w ogóle, który może być interpretowany w ten sposób reaktywnego podejścia. W tym przypadku istnieją tylko dwa podejścia, które znam:

  1. Reactive Extensions (Rx).
  2. Event-based Asynchronous Pattern (EAP).

Jednak można zrobić sprawę, że żadnego programu zdarzeniami jest reaktywna do pewnego stopnia tak właśnie obsługi zdarzeń UI to (proste) forma „programowania asynchronicznego.”


Są to tylko popularne modele. Każda platforma lub biblioteka może dodać więcej.Oto niektóre z góry na głowie:

  • Klasa Socket ma specjalną formę APM, które mogą być stosowane w celu zminimalizowania alokacji pamięci. Działa bardzo podobnie do APM, ale nie pasuje do wzorca.
  • WinRT Runtime (już w Windows 8) ma swoje własne reprezentacje asynchronicznych operacji (IAsyncOperation<TResult> i IAsyncInfo).
  • Windows Phone ma szczególne wsparcie dla background agent, która pozwala na uruchomienie kodu w tle, nawet jeśli aplikacja nie jest obecnie uruchomiony.