2015-05-11 36 views
1

我在Azure上創建了一個documentDB,並且可以成功創建並獲取文檔。無法使用Async DocumentDB操作的結果CreateDocumentAsync

但是,雖然在數據庫中成功創建了文檔,但我無法使用CreateDocumentAsync的響應。代碼立即返回到控制器上的調用方法。所以調試線從來沒有達到。

而且我的ID設置爲GUID,但返回到控制器的文件有1

控制器的標識

[HttpPost] 
    [Route("")] 
    public IHttpActionResult CreateNewApplication(dynamic data) 
    { 
     if (data == null) 
     { 
      return BadRequest("data was empty"); 
     } 

     try 
     { 
      var doc = _applicationResource.Save(data); 
      return Ok(doc.Id); //code hits this point and 'returns' 
     } 
     catch (Exception ex) 
     { 
      return BadRequest(ex.Message); 
     } 
    } 

資源

public async Task<Document> Save(dynamic application) 
    { 
     Document created; 

     using (Client) 
     { 
      application.id = Guid.NewGuid(); 
      var database = await RetrieveOrCreateDatabaseAsync(Database); 
      var collection = await RetrieveOrCreateCollectionAsync(database.SelfLink, CollectionName); 

      //persist the documents in DocumentDB 
      created = await Client.CreateDocumentAsync(collection.SelfLink, application); 

     } 

     Debug.WriteLine("Application saved with ID {0} resourceId {1}", created.Id, created.ResourceId); 

     return created; 

    } 

獲取請求按預期返回數據:

[HttpGet] 
    [Route("{id}")] 
    public IHttpActionResult GetApplication(string id) 
    { 
     var application = _applicationResource.GetById(id); 
     return Ok(application); 
    } 

回答

3

那是因爲你不等待異步方法:

此:

var doc = _applicationResource.Save(data); 

需要是:

var doc = await _applicationResource.Save(data); 

你的方法應該如下所示:

[HttpPost] 
[Route("")] 
public async Task<IHttpActionResult> CreateNewApplication(dynamic data) 
{ 
    if (data == null) 
    { 
     return BadRequest("data was empty"); 
    } 

    try 
    { 
     var doc = await _applicationResource.Save(data); 
     return Ok(doc.Id); //code hits this point and 'returns' 
    } 
    catch (Exception ex) 
    { 
     return BadRequest(ex.Message); 
    } 
} 
+0

嗨,是的,修正它。感謝您的快速響應。事情是,我沒有任何我的get方法異步查詢數據庫,他們都按預期返回。任何想法爲什麼差異?請參閱編輯問題。 – Kildareflare

+0

你的'GetById'方法是異步的嗎?如果是這樣,它會返回一個'任務',而不是'T'。似乎不太可能它應該正常工作。 –

+0

@YuvalItzchakov,我推測'Document'類具有'Guid'類型的'Id'屬性。或者它甚至不會編譯。 –