2011-11-17 19 views
10

Zaczynam czytać o .NET 4.5 Async, ale szczerze mówiąc nie możemy jeszcze w pełni wykorzystać tego, kiedy przychodzi do użycia tupot. Więc spróbuję uzyskać to z bezpośrednim pytaniem:.NET 4.5 Async kontra TPL

Zazwyczaj używam .NET 4 TPL do wywoływania drogich usług internetowych i wywołań DB z poziomu mojej aplikacji ASP.NET. Wydaje się, że mogę osiągnąć to samo z Async. Czy to prawda? Kiedy użyć?

Z góry dziękuję.

Odpowiedz

15

TPL jest biblioteką do obliczeń równoległych. .NET async jest opcją językową, zbudowaną na licencji TPL, która ułatwia proces. Jest to szczególnie ważne, gdy masz przepływy pracy z wieloma krokami.

W skrócie, async pozwala pisać kod tak, jakby był synchroniczny, więc logiczny przepływ pozostaje nienaruszony. Proces oczekiwania na ukończenie zadania, uruchomienie określonego kodu, kiedy to nastąpi, można wykonać w sposób bardzo naturalny z użyciem async. Kompilatory C# 5.0 i VB 11.0 przekształcają kod w równoważny kod C# 4.0 i VB 10.0 za pomocą TPL i niektórych nowych typów powiązanych z async.

Aby uzyskać doskonałe objaśnienie pod maską async, zobacz blog Jona Skeeta z serii Eduasync.

Jak więc zdecydować, którego użyć? Cóż, async zasadniczo usuwa wszystkie złożoności tworzenia sekwencji fragmentów kodu, które są połączone za pomocą asynchronicznych wywołań. Prawdopodobnie, gdy zadzwonisz do usługi internetowej lub uzyskasz dostęp do bazy danych, chcesz coś zrobić z tym, co zostanie zwrócone. async pozwala umieścić kod wywołujący i przetwarzający razem, co powinno ułatwić pisanie kodu, a także ułatwić jego późniejsze czytanie.

+0

dziękuje Jeffreyowi za odpowiedź, ale wciąż nie wie, kiedy użyć ..powiedz na przykład w przykładowym wywołaniu usługi sieciowej. –

+1

Użyj asynchronizacji. Jeśli znajdziesz coś, czego nie możesz osiągnąć z asynchronizacją, skorzystaj z licencji TPL. Jeśli to nie było jasne. To powinno być wybrane jako odpowiedź, ponieważ jest to zwięzłe, zwięzłe wyjaśnienie. – BentOnCoding

-1

Moje przypuszczenie jest wewnętrznie zarówno .NET TPL i async, używa wątków wątku. Async może być uproszczoną składnią dla tradycyjnego wzorca BeginXXX/EndXXX.

Ale co ważniejsze, aplikacje TPL, wątek threadpool i nie powinieneś go używać do wykonywania kosztownych operacji, ponieważ te same wątki są używane przez samą strukturę. Jeśli prowadzisz kosztowną operację (jak już wspomniałeś), lepiej jest utworzyć nowy samodzielny wątek lub ustawić właściwość "LongRunning" ThreadSchedular podczas używania TPL.

+4

drogie I/O! = Drogi procesor –

0

@Pawan o BeginXXX/EndXXX: Myślę, że mieszasz te rzeczy. Patrząc na C#, istnieją 3 różne patterns uruchamiać kod równoległy:

  • nieaktualne: asynchroniczny model programowania (APM)
  • Przestarzałe: Event oparte asynchroniczny Wzór (EAP)
  • Up-to-Date : Wzorzec asynchroniczny oparty na zadaniach (TAP)

TPL jest fundamentem, na którym zbudowany jest TAP. TPL została wprowadzona w .NET 4. Chociaż TPL i TAP są w pewnym sensie używane równie dobrze w dokumentacji Microsoft. Tak czy inaczej, async/await to tylko funkcja językowa wprowadzona w języku C# 5, czyli .NET 4.5, w celu uproszczenia obsługi licencji TPL.

The BeginXXX/EndXXX belongs to the APM style! To nie ma nic wspólnego z OC. Te liczne wersje utrudniają przegląd.