将async方法结果添加到dtatable列

时间:2016-12-14 11:06:43

标签: c# async-await

我的代码:

public async Task<DataRow> GetForm(int id)
{
    DataRow row = await ExecuteOneRowQueryAsync(id);
    DataTable dt = await SelectAsync();

    row.Table.Columns.Add("Col", typeof (DataTable));
    row["Col"] = dt; //throws

    return row;
} 

如果我想将数据表值分配给单元格Coll,则会抛出错误。它说

  

dt 的类型是 System.Threading.Tasks.Task`1 [System.Data.DataTable] ,但 DataTable 类型是预期的。

我想异步代码部分出了问题。有没有办法让它运行?

修改

从web api控制器调用该方法

    public class Controller: ApiController
    {
        public Task<DataRow> Get(int id)
        {
            return _service.GetForm(id);
        }
    }

1 个答案:

答案 0 :(得分:1)

我怀疑您在实际代码中有Task<DataTable>var,以下代码可以使用:

DataTable dt = await SelectAsync();

row.Table.Columns.Add("Col", typeof (DataTable));
row["Col"] = dt; // no error will be thrown

并选择异步签名就像:

public async Task<DataTable> SelectAsync()
{
   ......
   ......
}

如果您的代码如下所示,您发布的错误就会出现:

Task<DataTable> dt = SelectAsync();

row.Table.Columns.Add("Col", typeof (DataTable));
row["Col"] = dt; // now that error will come