1
私は下記のitemsクエリで競合状態にあります。 select 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は、データベース呼び出しを同期して実行するように強制していました。これはmiIds.ItemIdの代わりにitem.Idを選択したかったのが本当に意味が分かりません。 –