1
我有以下項目查詢的競賽狀況。選擇miIds.ItemId不會等待allItemList數據庫調用完成返回所有結果。解決這個問題的最好方法是什麼?我是否應該將查詢拉出任務並在開始查詢之前等待它返回,或者在查詢中可以做些什麼來讓它等待? 謝謝。linq查詢中的賽車狀況
private async Task LoadData()
{
// Query Mission_Item Ids.
var missionItemsList = await App.Database.GetTableAsync<Mission_Items_Model>();
var missionItemIds = from missionItem in missionItemsList
where missionItem.MissionId == game.CurrentMissionId
select missionItem;
// Query All Items, select item where item's itemIds match mission's itemIds.
var allItemList = await App.Database.GetTableAsync<ItemModel>();
var items = from item in allItemList
let mi = (from miIds in missionItemIds where miIds.ItemId == item.Id select miIds.ItemId)
where mi.Contains(item.Id)
select item;
// Item list for mission.
ItemsList = new List<ItemModel>(items);
...
}
你如何使用'await'並且有競爭狀態?你確定你理解這個問題嗎? – user3185569
謝謝!當我運行代碼時,missionItemsList每次都會返回一個隨機數的對象。如果我註釋掉linq查詢,那麼missionItemsList總是返回正確的項目數。我雖然說,選擇miIds.ItemId強制數據庫調用同步運行。這真的沒有道理,我現在看到,想要我選擇的是item.Id而不是miIds.ItemId。 –