如何使用async和await关键字将下面的代码段运行到另一个线程中。
var pList = (from item in (from p in db.RTLS_PERSONDTLS
where p.OPERATION_TYPE == 1
where (lsdAtc <= p.CREATED_TIME && p.CREATED_TIME <= todayEndDate)
let pPhotoRow = (from q in db.Cloud_persons_images
where q.img_name == p.PERSON_ID
where (lsdAtc <= q.Createdtime && q.Createdtime <= todayEndDate)
select q).FirstOrDefault()
select new
{
p,
Img_ext = (pPhotoRow.Img_ext ?? string.Empty),
photoBytes = pPhotoRow.Person_img ?? emptyByteArray
}).ToList()
select new PersonListInfoDTO
{
P_ID = item.p.PERSON_ID,
T_ID = (int)item.p.TAG_ID.Value,
PNAME = item.p.PERSONNAME,
DEPT = (int)item.p.DEPARTMENT_id,
DESG = (int)item.p.DESIGNATION_id,
MOB_NO = item.p.MOBILE_NO,
ACTINACT = (int)item.p.ACTINACT,
PHOTO = new PersonPhotoInfo { PDATA = Convert.ToBase64String(item.photoBytes), PEXT = item.Img_ext },
P_ZONES = (from zone in db.RTLS_TAG_ZONE_CONFIG
where (lsdAtc <= zone.created_time && zone.created_time <= todayEndDate)
where zone.tagid == item.p.TAG_ID
select (int)zone.zone_id).ToList()
}).ToList();
我试过下面的代码片段
var pList = await(from item in (from p in db.RTLS_PERSONDTLS
where p.OPERATION_TYPE == 1
where (lsdAtc <= p.CREATED_TIME && p.CREATED_TIME <= todayEndDate)
let pPhotoRow = (from q in db.Cloud_persons_images
where q.img_name == p.PERSON_ID
where (lsdAtc <= q.Createdtime && q.Createdtime <= todayEndDate)
select q).FirstOrDefaultAsync()
select new
{
p,
Img_ext = (pPhotoRow.Img_ext ?? string.Empty),
photoBytes = pPhotoRow.Person_img ?? emptyByteArray
}).ToListAsync()
select new PersonListInfoDTO
{
P_ID = item.p.PERSON_ID,
T_ID = (int)item.p.TAG_ID.Value,
PNAME = item.p.PERSONNAME,
DEPT = (int)item.p.DEPARTMENT_id,
DESG = (int)item.p.DESIGNATION_id,
MOB_NO = item.p.MOBILE_NO,
ACTINACT = (int)item.p.ACTINACT,
PHOTO = new PersonPhotoInfo { PDATA = Convert.ToBase64String(item.photoBytes), PEXT = item.Img_ext },
P_ZONES = (from zone in db.RTLS_TAG_ZONE_CONFIG
where (lsdAtc <= zone.created_time && zone.created_time <= todayEndDate)
where zone.tagid == item.p.TAG_ID
select (int)zone.zone_id).ToListAsync()
}).ToListAsync();
但我的问题是我的linq子查询部分依赖于以前的结果,如果先前的查询需要一些时间来执行,那么这个查询可能是不明确的。我如何克服这个问题。
答案 0 :(得分:1)
我认为你可以使用C#中的任务来帮助解决你的问题。在这里,我找到了一个链接和文章,其中显示了7种创建任务的方法。
答案 1 :(得分:0)
您似乎有一个巨大的linq查询表达式。将它分成几个查询并等待/异步那些单独的查询会更有意义。它也有助于提高可读性。