2013-02-28 18 views
7

Chciałbym móc utworzyć zadanie bez uruchamiania go, podobne do uruchamiania var a = new Task(); a.Start();, ale z niestandardową fabryką. Fabryki zapewniają StartNew(), ale nie mogę znaleźć metody oddzielenia tych dwóch działań. czy to możliwe?Tworzenie, ale nie uruchamianie zadania w fabryce zadań niestandardowych?

+0

Artykuł może Cię zainteresować: ["Task.Factory.StartNew" kontra "nowe zadanie (...). Start"] (http://blogs.msdn.com/b/pfxteam/archive/2010/06/ 13/10024153.aspx). Autor poczynił kilka interesujących uwag o tym, dlaczego nie chcesz opóźniać rozpoczęcia zadań. –

Odpowiedz

14

A TaskFactory to w zasadzie dwa zestawy domyślnych opcji (tworzenie i kontynuacja), domyślny token anulowania i harmonogram zadań.

Możesz określić token anulowania i opcje tworzenia, gdy dopiero tworzysz nowe zadanie - i uruchamiać je na dowolnym harmonogramie, który chcesz. A więc:

Task task = new Task(action, 
        factory.CancellationToken, 
        factory.CreationOptions); 
... 
task.Start(factory.Scheduler); 

powinien wykonać pracę inną niż opcje kontynuacji. Opcje kontynuacji mają znaczenie tylko wtedy, gdy dodajesz kontynuację, którą możesz określić bezpośrednio. Czy jest coś, co nie jest objęte tym?

(Należy pamiętać, że Asynchroniczny wzorzec oparty na zadaniach zasadniczo dotyczy zadań "gorących", które są uruchamiane do czasu ich wyświetlenia, dlatego należy unikać zbyt szerokiego prezentowania niezamkniętych zadań.)

+0

Powoduje to, że utworzenie fabryki jest zbędne, ponieważ modyfikujemy zachowanie zadania ręcznie w czasie tworzenia i kontynuacji zadania. Miałem nadzieję, że istnieje bardziej elegancka metoda, którą przeoczyłem, ale jeśli nie, to dobrze, że to też wiem =) – Jake

+0

@Jake: Cóż, możesz chcieć zachować fabrykę w taki sposób, aby zamknąć te opcje - lub natychmiast rozpocząć inne zadania. Chodzi mi o to, że tak naprawdę nie robi wiele, czego nie można zrobić ręcznie. –

Powiązane problemy