2016-12-14 2 views
0

Мой код:Добавить асинхронной результат метода в dtatable столбец

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; 
} 

Он выдает ошибку, когда я хочу, чтобы присвоить DataTable значение в ячейку Coll. Это говорит

Тип дт является System.Threading.Tasks.Task`1 [System.Data.DataTable] но DataTable типа, как ожидается.

Я думаю, что что-то не так с частью кода асинхронного кода. Есть ли способ заставить его работать?

EDIT

Метод вызывается из контроллера Web API

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

Предположим, вам нужно иметь 'ждать SelectAsync() результат;', но не видя недостающий код, трудно рассказать. – Equalsk

+0

@Equalsk - Я думал, что, но тогда назначение завершится неудачно, поскольку 'dt' получает явный тип' DataTable', а не объявляется 'var'. Так что здесь происходит что-то странное, ошибка не там, где указывает OP, или это * не является фактическим кодом *. –

+0

'await SelectAsync(). Результат не будет компилироваться – user49126

ответ

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 
+0

Привет, мой код выглядит точно так же, как ваш, но я добавил код (контроллер), который вызывает метод GetForm. Нужно ли добавлять ключевое слово ожидания к контроллеру? – user49126

+0

yes сделать действие контроллера как async –

Смежные вопросы