2017-01-30 4 views
0

Was wird tatsächlich von einer Web-API-Methode mit der folgenden Signatur zurückgegeben?Was gibt eine asynchrone Web-API-Methode zurück?

[HttpPost] 
    public async Task<IHttpActionResult> Post([FromBody] ReviewViewModel review) 
    { 
     using (var context = new BooksContext()) 
     { 
      var book = await context.Books.FirstOrDefaultAsync(b => b.Id == review.BookId); 
      if (book == null) 
      { 
       return NotFound(); 
      } 

      var newReview = context.Reviews.Add(new Review 
      { 
       BookId = book.Id, 
       Description = review.Description, 
       Rating = review.Rating 
      }); 

      await context.SaveChangesAsync(); 
      return Ok(new ReviewViewModel(newReview)); 
     } 
    } 

Methode entnommen aus: http://www.developerhandbook.com/c-sharp/create-restful-api-authentication-using-web-api-jwt/

ich bedenken, dass es entweder:

1) Der Rahmen gibt nicht eine Antwort auf den Aufruf Client bis .IsCompleted wahr ist, oder 2) Das Framework kehrt zum Client zurück, aber der Client muss die Situation mit der Situation behandeln, oder 3) Etwas ganz anderes.

+0

Es ist Nummer 1) –

+0

Sobald Sie die Zustandsmaschine hinter dem async syntatic Zucker verstehen, ist es etwas einfacher zu erkennen, was wirklich geschieht. –

+0

Ich dachte, ich verstehe die Zustandsmaschine, aber das wäre die Web-API, die darüber hinaus noch zusätzliche Funktionalität bietet, ja? –

Antwort

2

Aus dem Link zu finden:

asynchronen Code auf diese Weise schreiben kann der Faden, während Daten (Bücher und Beiträge) veröffentlicht werden aus der Datenbank abgerufen werden und konvertiert Objekte, die von unserem verzehrt werden Code. Wenn der asynchrone Vorgang abgeschlossen ist, nimmt der Code den Vorgang auf und setzt die Ausführung fort. (Damit meinen wir, dass die hydratisierten Datenobjekte an das zugrunde liegende Framework übergeben und in JSON/XML konvertiert und an den Client zurückgegeben werden).

5

async Aktionen sind ein Implementierungsdetail.

Das Framework wartet auf Task zu lösen; Der Kunde wird keinen Unterschied bemerken.

Verwandte Themen