Wie machen die Aufgabe erwartbaren

Gestern habe ich angefangen zu spielen mit Microsoft CTP async Bibliothek und nirgends konnte ich nicht finden, die die ordnungsgemäße Durchführung des erwartbaren Aufgabe. Ich weiß, dass es muss die Umsetzung so?:

public struct SampleAwaiter<T>
{
    private readonly Task<T> task;
    public SampleAwaiter(Task<T> task) { this.task = task; }
    public bool IsCompleted { get { return task.IsCompleted; } }
    public void OnCompleted(Action continuation) { TaskEx.Run(continuation); }
    public T GetResult() { return task.Result; }
}

Aber wie kann ich das nun umsetzen-eine Aufgabe, die würde, sagen wir mal, 5 Sekunden warten, und wieder einige Zeichenkette, z.B. "Hallo Welt"?

Einer Weg ist, um die Aufgabe direkt in etwa so:

Task<string> task = TaskEx.Run(
            () =>
                {
                    Thread.Sleep(5000);
                    return "Hello World";
                });

        string str = await task;

Aber wie würde ich das mit den erwartbaren Umsetzung? Oder habe ich es nur falsch verstanden alles?

Vielen Dank für jede information/Hilfe 🙂

  • async/await gilt für die Methoden, nicht um Aufgaben.
  • await gilt für Ausdrücke, die eine geeignete GetAwaiter() Umsetzung, die Task tut - so await gilt für Task (in einem Sinn)
  • In diesem schmalen Gehäuse, die Sie tun können await TaskEx.Delay(5000);, aber Sie haben für die Studie mehr für den Allgemeinen Fall. Die await keyword sucht GetAwaiter, und im Grunde alles, was einen geeigneten GetAwaiter verwendet werden kann, mit erwarten. Jon Skeet ist eine tolle Serie in seinem blog disecting erwarten Sie in großem detail.
  • warten gilt nicht für die Methoden. Es gilt für beliebigen Ausdruck angeben, der Task oder Task(T). Dies ist ein häufiger Fehler.
InformationsquelleAutor DavorinP | 2011-08-07
Schreibe einen Kommentar