2017-07-28 3 views
-1

ich habe:Wie erstellt man eine neue Aufgabe vom Typ Aufgabe?

async Task doWork() { Console.WriteLine("do some async work in this method"); } 

Task task = new Task(doWork); //line X 
task.Start(); 
task.Wait(); 

Linie X gibt einen Kompilierungsfehler:

CS0407 'Task Form1.doWork()' has the wrong return type

Wie instanziieren ich eine neue Aufgabe doWork?

Ich kann Folgendes verwenden, aber es gibt mir eine andere Reihe von Problemen.

Task task = doWork(); 
task.Wait(); 

Ich möchte diese zweite Methode vermeiden. Wie instanziiere ich eine neue Task des Typs async Task in Zeile X?

+0

'Aufgabe task = doWork();' aber die Aufgabe wird synchron sein, da Sie 'erwarten' in der Funktion – Gusman

+0

nicht verwenden. Sie haben offensichtlich auf https://msdn.microsoft.com/en-us/library geschaut /dd321321(v=vs.110).aspx um zu sehen, welcher Typ benötigt wird - also etwas unklar, worüber du ein Problem hast ... Kannst du erklären, was du eigentlich mit diesem Code erreichen willst? –

+0

@Gusman, ja es gibt "erwarten" Zeug in 'doWork', aber sollte es nicht immer noch für eine leere Aufgabe gelten? Ich habe den eigentlichen Code entfernt, um das Problem nicht zu verschleiern. –

Antwort

0

Seit doWork() Rückgabetyp von Task hat die Erklärung eine Instanz der generischen Task<TResult> sein muss - das heißt Task<Task>

+0

Ja! 'Aufgabe Aufgabe = neue Aufgabe (doWork)' –

2

In diesem Fall, was Sie wollen wahrscheinlich ist doWork zu definieren, den Rückgabetyp haben von void. Dann können Sie task initialisieren, wie Sie mit dem Task-Konstruktor mit einem Argument von Action (see docs) gezeigt haben.

Alternativ können Sie verwenden

Task task = doWork(); 

here Siehe für eine Diskussion der Vor- und Nachteile zwischen den beiden Techniken.

+0

Danke. Wenn ich eine Art von 'Task' für' doWork' benötige, wie sollte ich es in einer Konstruktoranweisung 'newTask' instanziieren? –

+0

@OldGeezer Warum brauchen Sie einen 'Task'-Konstruktor? – yinnonsanders

+0

Für akademisches Verständnis. Ich habe versucht, herauszufinden, wie man eine asynchrone Aufgabe von einer nicht-asynchronen Aufgabe aufruft und erst dann zu dem Aufrufer zurückkehrt, nachdem die aufgerufenen Aufgaben vollständig abgeschlossen sind. –

Verwandte Themen