2016-07-26 3 views
3

zurückgeben Was ist der semantische Unterschied zwischen diesen beiden Methoden?Unterschied zwischen diesen beiden Methoden, die Task

public Task DoSomething() 
    { 
     return Task.Run(() => MyFunction()); 
    } 

    public async Task DoSomethingAsync() 
    { 
     await Task.Run(() => MyFunction()); 
    } 

Gibt es etwas, was ich denke, sollte zwischen dem einen oder anderen zu wählen?

+0

Ist dies eine Bibliothek/ein Framework oder eine Anwendung, die auf einem bestimmten Framework basiert? –

+1

Es gibt einen großen Unterschied bei der Behandlung von Ausnahmeausbreitung und Synchronisation, überprüfen Sie [this] (http://stackoverflow.com/q/21033150/1768303). – Noseratio

Antwort

7

Der eigentliche Unterschied:

  1. Die erste Methode Task.Run nennen wird und gibt die resultierende Aufgabe
  2. Die zweite Methode wird in eine async Zustandsmaschine überführt werden, die Task.Run nennen wird, dann die Warteschlange eines Fortsetzung dass, wenn diese Aufgabe wird es abgeschlossen ist, weiterhin Ihre Methode

In Bezug auf die Ausführung von „welche soll ich wählen“, hier ist die allgemeine Richtlinie ich benutze:

Wenn alle Ihre Methode wird in Bezug auf die Aufgaben zu tun ist, sie dann zurückzukehren verwenden Sie keine async/await
Wenn stattdessen Sie müssen zu „warten“ eine Aufgabe abzuschließen, dann mehr Dinge tun , dann verwenden Sie async/await.

Ich bin mir sicher, dass es Ausnahmen gibt, aber ich habe noch keine gefunden.

So von diesen beiden Methoden, wählen Sie die erste.

+0

also in obigem Beispiel erster Ansatz ist in diesem Fall besser? –

+1

@EhsanSajjad, ja es ist besser ... http://stackoverflow.com/documentation/c%23/26/keywords/5993/await#t=201607261114381411264 –