如何使该方法异步?
public List<ItemsList> GetAllItems()
{
List<ItemsList> items = new List<ItemsList>();
string query= String.Format("SELECT MFPARTN, MFDSC, sum(QHAVL) as Total FROM IPMFF");
newConnection.OpenConnection();
command = new Command(Query, newConnection.ConnectionInstance);
dataReader = command.ExecuteReader();
ItemsList itemsList = null;
while (dataReader.Read())
{
itemsList = new ItemsList();
if (System.DBNull.Value != dataReader["MFPARTN"])
{
itemsList.ItemNumber = (dataReader["MFPARTN"].ToString());
}
if (System.DBNull.Value != dataReader["MFDSC"])
{
itemsList.ItemDescription = (dataReader["MFDSC"].ToString());
}
if (System.DBNull.Value != dataReader["Total"])
{
itemsList.ItemQuantity = (Convert.ToInt32(dataReader["Total"]));
}
items.Add(itemsList);
}
return items;
}
仅放置async
和await
似乎无效。另外,如何使它成为Task
方法?我是异步方法的新手,所以。
更新
我已经修改了这种方法。
public Task<List<ItemsList>> GetAllItems()
{
List<ItemsList> items = new List<ItemsList>();
string query= String.Format("SELECT MFPARTN, MFDSC, sum(QHAVL) as Total FROM IPMFF");
newConnection.OpenConnection();
command = new Command(Query, newConnection.ConnectionInstance);
dataReader = command.ExecuteReader();
ItemsList itemsList = null;
while (await dataReader.ReadAsync())
{
itemsList = new ItemsList();
if (System.DBNull.Value != dataReader["MFPARTN"])
{
itemsList.ItemNumber = (dataReader["MFPARTN"].ToString());
}
if (System.DBNull.Value != dataReader["MFDSC"])
{
itemsList.ItemDescription = (dataReader["MFDSC"].ToString());
}
if (System.DBNull.Value != dataReader["Total"])
{
itemsList.ItemQuantity = (Convert.ToInt32(dataReader["Total"]));
}
items.Add(itemsList);
}
return items;
}
但是当我执行这段代码时,它将返回此错误。
传递到字典中的模型项是类型 'System.Threading.Tasks.Task
System.Collections.Generic.List
,但 这本字典需要类型的模型项 'System.Collections.Generic.IEnumerable`
答案 0 :(得分:0)
您可以定义一个简单的Task<T>
来处理GetAllItems
函数,
public Task<List<ItemsList>> GetListOfItems(){
//Simply pass in your GetAllItems Method
return Task.Factory.StartNew(()=>GetAllItems());
}
您现在可以创建一个函数来处理异步操作,如下所示:
public async void GetListOfItemsAsync(){
List<ItemsList> myItems=await GetListOfItems();
//Do something with your list...
}
还有其他方法可以做到这一点。我建议您阅读Asynchronous programming with async and await (C#)上的Microsoft文档。