首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步任务中的C# Xamarin异步任务

异步任务中的C# Xamarin异步任务
EN

Stack Overflow用户
提问于 2017-05-02 21:30:08
回答 1查看 491关注 0票数 0

我想我有赛车问题,自己解决不了。

在中,我从Azure中获取数据,并试图在循环中更新本地SQLite db。

下面是代码:

代码语言:javascript
复制
        foreach (var hotItem in updatedData)
        {
            var updated = await vendorController.ContainsVideoUrlAndUpdate(hotItem, date);

            if (!updated)
                await vendorController.AddUpdatedData(hotItem);
        }


        public async Task<bool> ContainsVideoUrlAndUpdate(List<VideoItem> updateDataList, DateTime lastDateUpdated) {
        try
        {
            foreach (VideoItem v in updateDataList)
            {
                ***WORKS ONLY FIRST ITERATION****var containsList = (await Conn.Table<VideoItem>().Where(o => (o.VideoURL == v.VideoURL && o.ZipCode == v.ZipCode) || (o.VideoURL == v.VideoURL && o.CityWide == true)).ToListAsync());****************
                if (containsList != null && containsList.Count > 0)
                {
                    foreach (var currData in containsList)
                    {
                        currData.LastUpdated = lastDateUpdated.ToString();
                        await Conn.UpdateAsync(currData);
                    }
                }
                else
                {
                    await Conn.InsertAsync(v);
                }
            }

            return true;
        }
        catch (SQLiteException ex)
        {
            Log.Info("Exception Updating LocalVideoList.sqlite DB", ex.Message);
            return false;
        }
    }

标记为*的行只工作第一次迭代*只适用于循环的第一次迭代。尽管我在SQLite db中有10条测试记录与在该行中搜索的10条记录相匹配,但只找到了第一条。另外9个失败了。

我认为它一定与异步任务有关,但我似乎无法修复它。我做错了什么?

更新:为了澄清,我第一次标出的行是有效的--它在SQLite DB中找到匹配;其他九个迭代,即使这些记录存在于SQLite DB中,也找不到匹配。

代码语言:javascript
复制
 if (containsList != null && containsList.Count > 0)

在第二个循环和后续循环中返回count =0,因此它不会更新SQLite db中的现有记录,而是运行:

代码语言:javascript
复制
await Conn.InsertAsync(v);

结果是在SQLite DB中插入重复的记录,而不是更新现有记录中的lastupdatedate字段。

我使用SQLite db Firefox插件对所有10条记录使用相同的查询,而查询查找所有10条记录,所以它不是查询。当它循环第二次和后续的时间时,ascyn任务是否有可能将其锁定在外?没有例外。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-02 15:05:30

问题解决了。我雇了一个承包商来做第一个SQLite数据库工作,最后我看到他在SQLite表的VendorID字段上添加了一个惟一的约束(主键),这不是一个唯一的值字段。因此,当发布更新数据时,它没有发布10条记录,而是发布了1条记录10次。update循环运行时,它在第一次迭代中找到所有10条记录,更新了所有10条,然后找不到其他9条记录,因为它们根本不在那里。它每次运行程序时都会添加9条记录,并且由于主键约束错误,它再次多次添加相同的记录。如果代码看起来正确并且应该工作,那么首先看看那些你认为“正确”的东西。如果灯熄灭了,你不会撕开墙壁检查电线,你会先检查灯泡,对吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43747560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档