2017-05-22 42 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” –