2017-05-22 172 views
0

我瞭解異步方法,我不明白爲什麼ASYN任務方法的返回異步方法返回System.Threading.Tasks.Task

System.Threading.Tasks.Task'1 [系統...

下面是代碼:

public async Task<List<T>> GetAll(){ 
    try{ 
     var conn = new SQLiteAsyncConnection(System.IO.Path.Combine(path,"database.db")); 
      var value = await conn.Table<T>().ToListAsync(); 
      return value; 
     } 
     catch (Exception e) 
     { 
      Log.Info(TAG, "Error when selecting the registry. " + e.Message); 
     } 

     return null; 
} 

在這種情況下,返回值,但作爲System.Threading.Tasks.Task'1 [系統......而不是作爲查詢的回報。

+2

這是不是很清楚你的意思 - 是的,它會返回一個任務...這就是異步方法的工作原理。他們回報你說:「我已經爲你開始了工作 - 結果將在這項任務完成時完成。」 –

+0

對不起,讓我更清楚。我相信當我運行'conn.Table ()。 ToListAsync()'返回值必須是(select * from datatable),例如2,但它返回System.Threading.Tasks.Task'1 ..誰調用了'GetAll()'方法。 –

+1

不,我恐怕沒有什麼更清晰的......它仍然聽起來像你應該回顧一下調用異步API的含義。 (如果方法阻塞直到它可以直接返回結果,它不能是異步的,按照定義...) –

回答

-1

任何異步任務都會返回一個Task對象,該對象允許查看異步請求的狀態。如果要訪問查詢的結果,則必須諮詢屬性task.Result,其中包含異步方法的實際輸出。

+3

這是一個非常糟糕的想法,因爲它會*阻塞*直到異步操作完成。 OP已經以正確的方式等待結果 - 通過使用「await」 –